Example #1
0
def get_experiment_nodes(api, exp_id=None, hostname=None):
    """ Add the nodes from given experiment
    Return the experiment nodes list. Returns an empty list if exp_id is None
    Restrict to the nodes from current site

    :raise ValueError: If the experiment is not running,
    """
    hostname = hostname or HOSTNAME
    # add nodes from experiment

    if exp_id is None:
        return []

    # Check that the experiment is running
    state = experiment.get_experiment(api, exp_id, 'state')["state"]
    cnt = 0;
    while state != 'Running' and state != 'Terminated':
        print "Experiment %u not running but '%s'. Waiting %d" % (exp_id, state, cnt)
        time.sleep(20) # delay
        cnt = cnt + 1
        state = experiment.get_experiment(api, exp_id, 'state')["state"]
    if state == 'Terminated':
        raise RuntimeError("Experiment %u not running but '%s'" % (exp_id, state))
    # Check that the experiment is running
    resources = experiment.get_experiment(api, exp_id, 'resources')
    return extract_nodes(resources, hostname)
Example #2
0
def get_experiment_parser(opts):
    """ Parse namespace 'opts' object and execute requested 'get' command """

    user, passwd = auth.get_user_credentials(opts.username, opts.password)
    api = rest.Api(user, passwd)

    # pylint:disable=no-else-return
    if opts.get_cmd == 'experiment_list':
        return experiment.get_experiments_list(api, opts.state, opts.limit,
                                               opts.offset)
    elif opts.get_cmd == 'start':
        exp_id = helpers.get_current_experiment(api,
                                                opts.experiment_id,
                                                running_only=False)
        ret = experiment.get_experiment(api, exp_id, opts.get_cmd)

        # Add a 'date' field
        timestamp = ret['start_time']
        ret['local_date'] = time.ctime(timestamp) if timestamp else 'Unknown'
        return ret
    elif opts.get_cmd == 'experiments':
        return experiment.get_active_experiments(api,
                                                 running_only=not opts.active)
    else:
        exp_id = helpers.get_current_experiment(api, opts.experiment_id)
        return experiment.get_experiment(api, exp_id, opts.get_cmd)
Example #3
0
def get_experiment_parser(opts):
    """ Parse namespace 'opts' object and execute requested 'get' command """

    user, passwd = auth.get_user_credentials(opts.username, opts.password)
    api = rest.Api(user, passwd)

    # pylint:disable=no-else-return
    if opts.get_cmd == 'experiment_list':
        return experiment.get_experiments_list(api, opts.state, opts.limit,
                                               opts.offset)
    elif opts.get_cmd == 'start':
        exp_id = helpers.get_current_experiment(api, opts.experiment_id,
                                                running_only=False)
        ret = experiment.get_experiment(api, exp_id, opts.get_cmd)

        # Add a 'date' field
        timestamp = ret['start_time']
        ret['local_date'] = time.ctime(timestamp) if timestamp else 'Unknown'
        return ret
    elif opts.get_cmd == 'experiments':
        return experiment.get_active_experiments(api,
                                                 running_only=not opts.active)
    else:
        exp_id = helpers.get_current_experiment(api, opts.experiment_id)
        return experiment.get_experiment(api, exp_id, opts.get_cmd)
Example #4
0
    def test_get_experiment(self):
        """ Test experiment.get_experiment """

        ret = experiment.get_experiment(self.api, 123)
        self.assertEqual(ret, API_RET)

        ret = experiment.get_experiment(self.api, 123, option='resources')
        self.assertEqual(ret, API_RET)
Example #5
0
    def test_get_experiment(self):
        """ Test experiment.get_experiment """

        ret = experiment.get_experiment(self.api, 123)
        self.assertEqual(ret, API_RET)

        ret = experiment.get_experiment(self.api, 123, option='resources')
        self.assertEqual(ret, API_RET)
Example #6
0
def flash_nodes(experiment_id):
    all_nodes = experiment.get_experiment(request, experiment_id)['nodes']

    np.random.shuffle(all_nodes)

    # sink is always the first element
    sink = [all_nodes[0]]
    nodes = all_nodes[1:len(all_nodes)]

    print_log("Sink: {}".format(" ".join(sink)), header=False)
    print_log("Nodes: {}".format(" ".join(nodes)), header=False)

    print_log("Flashing nodes", header=False)
    node.node_command(request, 'update', experiment_id, nodes,
                      node_firmware_filepath)
    # flash again
    node.node_command(request, 'update', experiment_id, nodes,
                      node_firmware_filepath)

    print_log("Flashing sink", header=False)
    node.node_command(request, 'update', experiment_id, sink,
                      sink_firmware_filepath)
    # flash again
    node.node_command(request, 'update', experiment_id, sink,
                      sink_firmware_filepath)
def _get_exp_nodes(api, exp_id):
    """ Return experiment nodes properties """
    exp_res = {}
    res_list = experiment.get_experiment(api, exp_id, 'resources')['items']
    for res in res_list:
        exp_res[res['network_address']] = res
    return exp_res
Example #8
0
def cmd_ssh_forward(experiment_id, deployment_site):
    print_log("Creating tunnel to IoT-Lab")

    nodes_ports_dic = {}

    all_nodes = experiment.get_experiment(request, experiment_id)['nodes']
    starting_port = int(
        settings_reader.SettingsReader('starting_port').get_parameter("port"))

    seq_ports = np.arange(starting_port, starting_port + len(all_nodes))

    forward_cmd = []

    for counter, node in enumerate(all_nodes):
        forward_cmd.append(" -L {}:{}:{}".format(
            seq_ports[counter], node,
            settings_reader.SettingsReader(deployment_site).get_parameter(
                "listening_port")))
        nodes_ports_dic[node] = seq_ports[counter]

    forward_cmd = "".join(forward_cmd)

    ssh_tunnel_command = "ssh -T {}@{}.iot-lab.info {} ".format(
        settings_reader.SettingsReader("iot-lab-account").get_parameter(
            "user"), deployment_site, forward_cmd)

    pass_arg = [tmux_script_path, "ssh_forward", ssh_tunnel_command]
    subprocess.check_call(pass_arg)

    return nodes_ports_dic
def test_submit_experiment_a8_physical(api):
    resources = exp_resources_from_str("grenoble,a8,1-2")
    name = "test_exp_A8"
    duration = 2
    exp = experiment.submit_experiment(api, name, duration, [resources])
    exp_id = exp['id']
    experiment.wait_experiment(api, exp_id)
    state = experiment.get_experiment(api, exp_id, 'state')
    assert state['state'] == "Running"
def _wait_exp(api, exp_id):
    """ Wait experiment started """
    time.sleep(10)  # wait 10s so that 'start date' is set
    timestamp = experiment.get_experiment(
            api, exp_id, 'start')['start_time']
    start_date = time.ctime(timestamp) if timestamp else 'Unknown'
    print "Start-date: %s" % start_date
    experiment.wait_experiment(api, exp_id)
    print "Exp-started: %s" % time.ctime(int(time.time()))
def test_submit_experiment_a8_logical(api, exp):
    name = "test_exp_A8"
    duration = 2
    resources = exp_resources_from_str("2,archi=a8:at86rf231+site=grenoble")
    ret = experiment.submit_experiment(api, name, duration, [resources])
    exp.id = ret['id']
    exp_id = exp.id
    experiment.wait_experiment(api, exp_id)
    state = experiment.get_experiment(api, exp_id, 'state')
    assert state['state'] == "Running"
Example #12
0
def get_experiment_parser(opts):
    """ Parse namespace 'opts' object and execute requested 'get' command """

    user, passwd = auth.get_user_credentials(opts.username, opts.password)
    api = rest.Api(user, passwd)

    if opts.get_cmd == "experiment_list":
        return experiment.get_experiments_list(api, opts.state, opts.limit, opts.offset)
    elif opts.get_cmd == "start":
        exp_id = helpers.get_current_experiment(api, opts.experiment_id, running_only=False)
        ret = experiment.get_experiment(api, exp_id, opts.get_cmd)

        # Add a 'date' field
        timestamp = ret["start_time"]
        ret["local_date"] = time.ctime(timestamp) if timestamp else "Unknown"
        return ret
    else:
        exp_id = helpers.get_current_experiment(api, opts.experiment_id)
        return experiment.get_experiment(api, exp_id, opts.get_cmd)
Example #13
0
    def test_get_experiment(self, w_exp_archive):
        """ Test experiment.get_experiment """
        arch_content = '\x42\x69'

        ret_val = RequestRet(content=arch_content, status_code=200)
        patch('requests.get', return_value=ret_val).start()
        api = rest.Api('user', 'password')

        ret = experiment.get_experiment(api, 123, option='data')
        self.assertEquals(ret, 'Written')
        w_exp_archive.assert_called_with(123, arch_content)
Example #14
0
    def test_get_experiment(self, w_exp_archive):
        """ Test experiment.get_experiment """
        arch_content = '\x42\x69'

        ret_val = RequestRet(content=arch_content, status_code=200)
        patch('requests.get', return_value=ret_val).start()
        api = rest.Api('user', 'password')

        ret = experiment.get_experiment(api, 123, option='data')
        self.assertEquals(ret, 'Written')
        w_exp_archive.assert_called_with(123, arch_content)
Example #15
0
def get_experiment_parser(opts):
    """ Parse namespace 'opts' object and execute requested 'get' command """

    user, passwd = auth.get_user_credentials(opts.username, opts.password)
    api = rest.Api(user, passwd)

    if opts.get_cmd == 'experiment_list':
        return experiment.get_experiments_list(api, opts.state, opts.limit,
                                               opts.offset)
    else:
        exp_id = helpers.get_current_experiment(api, opts.experiment_id)
        return experiment.get_experiment(api, exp_id, opts.get_cmd)
def get_motes(expid):
    # use the file created by auth-cli command
    usr, pwd = iotlab.get_user_credentials()

    # authenticate through the REST interface
    api = iotlab.rest.Api(usr, pwd)

    # get experiment resources
    data = experiment.get_experiment(api, expid, 'resources')

    return (map(lambda x: x["network_address"].split('.')[0], data["items"]),
            data["items"][0]["network_address"].split('.')[1])
Example #17
0
def get_experiment_parser(opts):
    """ Parse namespace 'opts' object and execute requested 'get' command """

    user, passwd = auth.get_user_credentials(opts.username, opts.password)
    api = rest.Api(user, passwd)

    if opts.get_cmd == 'experiment_list':
        return experiment.get_experiments_list(api, opts.state, opts.limit,
                                               opts.offset)
    else:
        exp_id = helpers.get_current_experiment(api, opts.experiment_id)
        return experiment.get_experiment(api, exp_id, opts.get_cmd)
Example #18
0
def get_experiment_nodes(api, exp_id=None, hostname=None):
    """ Add the nodes from given experiment
    Return the experiment nodes list. Returns an empty list if exp_id is None
    Restrict to the nodes from current site

    :raise ValueError: If the experiment is not running,
    """
    hostname = hostname or HOSTNAME
    # add nodes from experiment

    if exp_id is None:
        return []

    # Check that the experiment is running
    state = experiment.get_experiment(api, exp_id, 'state')["state"]
    if state != 'Running':
        raise RuntimeError("Experiment %u not running '%s'" % (exp_id, state))

    # Check that the experiment is running
    resources = experiment.get_experiment(api, exp_id, 'resources')
    return extract_nodes(resources, hostname)
Example #19
0
def get_motes(expid):
    # use the file created by auth-cli command
    usr, pwd    = iotlab.get_user_credentials()

    # authenticate through the REST interface
    api = iotlab.rest.Api(usr, pwd)

    # get experiment resources
    data = experiment.get_experiment(api, expid, 'resources')

    return (map(lambda x: x["network_address"].split('.')[0], data["items"]),
            data["items"][0]["network_address"].split('.')[1])
Example #20
0
def get_experiment_nodes(api, exp_id=None, hostname=None):
    """ Add the nodes from given experiment
    Return the experiment nodes list. Returns an empty list if exp_id is None
    Restrict to the nodes from current site

    :raise ValueError: If the experiment is not running,
    """
    hostname = hostname or HOSTNAME
    # add nodes from experiment

    if exp_id is None:
        return []

    # Check that the experiment is running
    state = experiment.get_experiment(api, exp_id, 'state')["state"]
    if state != 'Running':
        raise RuntimeError("Experiment %u not running '%s'" % (exp_id, state))

    # Check that the experiment is running
    resources = experiment.get_experiment(api, exp_id, 'resources')
    return extract_nodes(resources, hostname)
    def wait_exp(self):
        """ Wait experiment started """
        fabric.utils.puts("wait_exp: %i" % self.exp_id)
        time.sleep(10)  # wait 10s so that 'start date' is set
        timestamp = experiment.get_experiment(
            self.api, self.exp_id, 'start')['start_time']
        start_date = time.ctime(timestamp) if timestamp else 'Unknown'

        fabric.utils.puts("Start-date: %s" % start_date)
        experiment.wait_experiment(self.api, self.exp_id)

        if self.archi == 'a8:at86rf231':
            self.wait_a8_started()

        fabric.utils.puts("Exp-started: %s" % start_date)
Example #22
0
    def wait_exp(self):
        """ Wait experiment started """
        fabric.utils.puts("wait_exp: %i" % self.exp_id)
        time.sleep(10)  # wait 10s so that 'start date' is set
        timestamp = experiment.get_experiment(self.api, self.exp_id,
                                              'start')['start_time']
        start_date = time.ctime(timestamp) if timestamp else 'Unknown'

        fabric.utils.puts("Start-date: %s" % start_date)
        experiment.wait_experiment(self.api, self.exp_id)

        if self.archi == 'a8:at86rf231':
            self.wait_a8_started()

        fabric.utils.puts("Exp-started: %s" % start_date)
Example #23
0
def get_experiment_parser(opts):
    """ Parse namespace 'opts' object and execute requested 'get' command """

    user, passwd = auth.get_user_credentials(opts.username, opts.password)
    api = rest.Api(user, passwd)
    # pylint:disable=no-else-return
    if opts.get_cmd == 'experiment_list':
        return experiment.get_experiments_list(api, opts.state, opts.limit,
                                               opts.offset)
    elif opts.get_cmd in ('start_date', 'state'):
        return _get_experiment_attr(api, opts)
    elif opts.get_cmd == 'experiments':
        return experiment.get_active_experiments(api,
                                                 running_only=not opts.active)
    else:
        exp_id = helpers.get_current_experiment(api, opts.experiment_id)

        return experiment.get_experiment(api, exp_id,
                                         _deprecate_cmd(opts.get_cmd))
Example #24
0
def _get_experiment_attr(api, opts):
    """ Return start_time or state experiment attribute with old api format"""
    assert opts.get_cmd in (
        'state',
        'start_date',
    )
    exp_id = helpers.get_current_experiment(api,
                                            opts.experiment_id,
                                            running_only=False)
    ret = experiment.get_experiment(api, exp_id, '')
    if opts.get_cmd == 'state':
        helpers.deprecate_warn_cmd('exp-state', 'print', 8)
        return {opts.get_cmd: ret[opts.get_cmd]}
    helpers.deprecate_warn_cmd('start-time', 'print', 8)
    # start_date option
    utc_date = datetime.strptime(ret[opts.get_cmd], '%Y-%m-%dT%H:%M:%SZ')
    timestamp = (utc_date - datetime(1970, 1, 1)).total_seconds()
    local_date = time.ctime(timestamp) if timestamp else 'Unknown'
    return {'start_time': int(timestamp), 'local_date': local_date}
def _get_exp_results(api, exp_id):
    """ Return a list of nodes with deployment success """
    return experiment.get_experiment(api, exp_id)['deploymentresults']['0']
Example #26
0
 def _get_nodes(self):
     """Return all nodes reserved by the experiment"""
     ret = get_experiment(Api(*self.user_credentials()), self.exp_id)
     return ret['nodes']
Example #27
0
def _get_exp_nodes(iotlab_api, exp_id):
    """ Get experiment nodes properties """
    resources = experiment.get_experiment(iotlab_api, exp_id, 'resources')['items']
    return dict((res['network_address'], res) for res in resources)
def wait_for_running(api, exp_id):
    experiment.wait_experiment(api, exp_id)
    state = experiment.get_experiment(api, exp_id, 'state')
    assert state['state'] == "Running"