def wait_experiment(api, exp_id, states='Running', step=5, timeout=float('+inf')): """ Wait for the experiment to be in `states` and also Terminated or Error :param api: API Rest api object :param exp_id: scheduler OAR id submission :param states: Comma separated string of states to wait for :param step: time to wait between each server check :param timeout: timeout if wait takes too long """ start_time = time.time() end_time = start_time + timeout full_states = helpers.check_experiment_state(states + ',Terminated,Error') while time.time() < end_time: # timeout state = get_experiment(api, exp_id, 'state')['state'] if state not in full_states: time.sleep(step) continue if state in states: # state was awaited return state # non wanted state, usually 'Terminated or Error' raise RuntimeError( "Experiment {0} already in state {1!r}".format(exp_id, str(state))) raise RuntimeError("Timeout reached")
def wait_experiment(api, exp_id, states='Running', step=5, timeout=float('+inf')): """ Wait for the experiment to be in `states` and also Terminated or Error :param api: API Rest api object :param exp_id: scheduler OAR id submission :param states: Comma separated string of states to wait for :param step: time to wait between each server check :param timeout: timeout if wait takes too long """ start_time = time.time() end_time = start_time + timeout full_states = helpers.check_experiment_state(states + ',Terminated,Error') while time.time() < end_time: # timeout state = get_experiment(api, exp_id, 'state')['state'] if state not in full_states: time.sleep(step) continue if state in states: # state was awaited return state # non wanted state, usually 'Terminated or Error' raise RuntimeError("Experiment {0} already in state {1!r}".format( exp_id, str(state))) raise RuntimeError("Timeout reached")
def get_experiments_list(api, state, limit, offset): """ Get the experiment list with the specific restriction: :param state: State of the experiment :param limit: maximum number of outputs :param offset: offset of experiments to start at """ state = helpers.check_experiment_state(state) return api.get_experiments(state, limit, offset)
def get_experiment(parser_options, request, parser): """ Get user experiment's description : _ download archive file (tar.gz) with JSONObject experiment description and firmware(s) _ print JSONObject with experiment state _ print JSONObject with experiment owner _ print JSONObject with experiment description :param parser_options: command-line parser options :type parser_options: Namespace object with options attribute :param request: API Rest request object :param parser: command-line parser """ if parser_options.experiment_list: state = helpers.check_experiment_state(parser_options.state, parser) queryset = 'state='+state if parser_options.limit is not None: queryset += '&limit=%s' % parser_options.limit else: queryset += '&limit=0' if parser_options.offset is not None: queryset += '&offset=%s' % parser_options.offset else: queryset += '&offset=0' experiment_json = request.get_experiments(queryset) print json.dumps(json.loads(experiment_json), indent=4, sort_keys=True) else: if parser_options.experiment_id is not None: experiment_id = parser_options.experiment_id else: queryset = "state=Running&limit=0&offset=0" experiments_json = json.loads(request.get_experiments(queryset)) experiment_id = \ helpers.check_experiments_running(experiments_json, parser) if parser_options.archive: data = request.get_experiment_archive(experiment_id) helpers.write_experiment_archive(experiment_id, data, parser) else: if parser_options.json: experiment_json = request.get_experiment(experiment_id) elif parser_options.resources_exp_id: experiment_json = request.get_experiment_resources_id(experiment_id) elif parser_options.exp_state: experiment_json = request.get_experiment_state(experiment_id) elif parser_options.resources: experiment_json = \ request.get_experiment_resources(experiment_id) print json.dumps(json.loads(experiment_json), indent=4, sort_keys=True)
def get_experiment(parser_options, request, parser): """ Get user experiment's description : _ download archive file (tar.gz) with JSONObject experiment description and firmware(s) _ print JSONObject with experiment state _ print JSONObject with experiment owner _ print JSONObject with experiment description :param parser_options: command-line parser options :type parser_options: Namespace object with options attribute :param request: API Rest request object :param parser: command-line parser """ if parser_options.experiment_list: state = helpers.check_experiment_state(parser_options.state, parser) queryset = 'state=' + state if parser_options.limit is not None: queryset += '&limit=%s' % parser_options.limit else: queryset += '&limit=0' if parser_options.offset is not None: queryset += '&offset=%s' % parser_options.offset else: queryset += '&offset=0' experiment_json = request.get_experiments(queryset) print json.dumps(json.loads(experiment_json), indent=4, sort_keys=True) else: if parser_options.experiment_id is not None: experiment_id = parser_options.experiment_id else: queryset = "state=Running&limit=0&offset=0" experiments_json = json.loads(request.get_experiments(queryset)) experiment_id = \ helpers.check_experiments_running(experiments_json, parser) if parser_options.archive: data = request.get_experiment_archive(experiment_id) helpers.write_experiment_archive(experiment_id, data, parser) else: if parser_options.json: experiment_json = request.get_experiment(experiment_id) elif parser_options.exp_state: experiment_json = request.get_experiment_state(experiment_id) elif parser_options.resources: experiment_json = \ request.get_experiment_resources(experiment_id) print json.dumps(json.loads(experiment_json), indent=4, sort_keys=True)
def _states_from_str(states_str): """Return list of states from comma separated string. Also verify given states are valid. """ return helpers.check_experiment_state(states_str).split(',')