示例#1
0
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")
示例#2
0
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")
示例#3
0
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)
示例#4
0
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)
示例#5
0
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)
示例#6
0
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)
示例#7
0
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(',')
示例#8
0
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(',')