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)
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)
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)
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
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"
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)
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)
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])
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)
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)
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))
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']
def _get_nodes(self): """Return all nodes reserved by the experiment""" ret = get_experiment(Api(*self.user_credentials()), self.exp_id) return ret['nodes']
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"