Beispiel #1
0
def json_jobs_update():

    try:
        job_ids = request.form.getlist('jobs[]')
        logging.info('Job ids: {0}'.format(job_ids))

        resp = cocaine_request('get_jobs_status', msgpack.packb([job_ids]))

        def convert_tss_to_dt(d):
            if d.get('create_ts'):
                d['create_ts'] = ts_to_dt(d['create_ts'])
            if d['start_ts']:
                d['start_ts'] = ts_to_dt(d['start_ts'])
            if d['finish_ts']:
                d['finish_ts'] = ts_to_dt(d['finish_ts'])

        for r in resp:
            convert_tss_to_dt(r)
            for error_msg in r.get('error_msg', []):
                error_msg['ts'] = ts_to_dt(error_msg['ts'])
            for task in r['tasks']:
                convert_tss_to_dt(task)

        return resp
    except Exception as e:
        logging.error(e)
        logging.error(traceback.format_exc())
        raise
Beispiel #2
0
def json_stat():
    try:
        stats = cocaine_request('get_flow_stats', msgpack.packb(None))
        return JsonResponse(json.dumps(stats))
    except Exception as e:
        logging.error(e)
        logging.error(traceback.format_exc())
        raise
Beispiel #3
0
def json_commands_history(year, month):
    try:
        resp = cocaine_request('minion_history_log', msgpack.packb([year, month]))
        resp = JsonResponse(json.dumps(resp))
        return resp
    except Exception as e:
        logging.error(e)
        logging.error(traceback.format_exc())
        raise
Beispiel #4
0
def json_commands():
    try:
        resp = cocaine_request('get_commands', msgpack.packb(None))
        resp = JsonResponse(json.dumps(resp))
        return resp
    except Exception as e:
        logging.error(e)
        logging.error(traceback.format_exc())
        raise
Beispiel #5
0
def json_group_info(group_id):
    try:
        resp = cocaine_request(
            'get_couple_statistics',
            msgpack.packb([int(group_id)])
        )
        return resp
    except Exception as e:
        logging.error(e)
        logging.error(traceback.format_exc())
        raise
Beispiel #6
0
def json_commands_node_start():
    node = request.form.get('node')
    host, port = node.split(':')
    if not node:
        raise ValueError('Node should be specified')
    cmd_resp = cocaine_request(
        'start_node_cmd',
        msgpack.packb([host.encode('utf-8'), int(port)])
    )
    cmd = mastermind_response(cmd_resp)

    resp = cocaine_request(
        'execute_cmd',
        msgpack.packb([host, cmd, {'node': node}])
    )
    resp = mastermind_response(resp)

    uid = resp.keys()[0]

    return uid
Beispiel #7
0
def json_approve_job(job_id):
    try:
        resp = cocaine_request(
            'approve_job',
            msgpack.packb([job_id])
        )

        return resp
    except Exception as e:
        logging.error(e)
        logging.error(traceback.format_exc())
        raise
Beispiel #8
0
def json_refinish_job(job_id):
    try:
        resp = cocaine_request(
            'restart_failed_to_finish_job',
            msgpack.packb([job_id])
        )

        return resp
    except Exception as e:
        logging.error(e)
        logging.error(traceback.format_exc())
        raise
Beispiel #9
0
def json_skip_task(job_id, task_id):
    try:
        resp = cocaine_request(
            'skip_failed_job_task',
            msgpack.packb([job_id, task_id])
        )

        return resp
    except Exception as e:
        logging.error(e)
        logging.error(traceback.format_exc())
        raise
Beispiel #10
0
def json_namespaces():
    filter = {
        'deleted': False
    }
    try:
        stats = cocaine_request(
            'get_namespaces_list',
            msgpack.packb([filter])
        )
        return stats
    except Exception as e:
        logging.error(e)
        logging.error(traceback.format_exc())
        raise
Beispiel #11
0
def json_treemap(namespace=None):
    try:
        options = {
            'namespace': namespace,
            'couple_status': request.args.get('couple_status')
        }
        resp = cocaine_request(
            'get_groups_tree',
            msgpack.packb([options])
        )
        return resp
    except Exception as e:
        logging.error(e)
        logging.error(traceback.format_exc())
        raise
Beispiel #12
0
def json_jobs_list(job_id=None, job_type=None, job_status=None, tag=None):

    if job_id:
        params = {
            'ids': [job_id],
        }
    else:
        if job_type not in SUPPORTED_JOB_TYPES:
            abort(404)
        if job_status not in ('not-approved', 'executing', 'pending', 'finished'):
            abort(404)

        limit = request.args.get('limit', 50)
        offset = request.args.get('offset', 0)

        params = {
            'job_type': MM_JOB_TYPES[job_type],
            'tag': tag,
            'statuses': MM_JOB_STATUSES[job_status],
            'limit': limit,
            'offset': offset,
        }

    try:

        resp = cocaine_request('get_job_list', msgpack.packb([params]))

        def convert_tss_to_dt(d):
            if d.get('create_ts'):
                d['create_ts'] = ts_to_dt(d['create_ts'])
            if d['start_ts']:
                d['start_ts'] = ts_to_dt(d['start_ts'])
            if d['finish_ts']:
                d['finish_ts'] = ts_to_dt(d['finish_ts'])

        for r in resp['jobs']:
            convert_tss_to_dt(r)
            for error_msg in r.get('error_msg', []):
                error_msg['ts'] = ts_to_dt(error_msg['ts'])
            for task in r['tasks']:
                convert_tss_to_dt(task)

        return resp
    except Exception as e:
        logging.error(e)
        logging.error(traceback.format_exc())
        raise
Beispiel #13
0
def json_monitor_couple_free_eff_space(namespace):
    limit = request.args.get('limit')
    offset = request.args.get('offset', 0)
    request_params = {
        'limit': limit,
        'offset': offset,
    }
    try:
        samples = cocaine_request(
            'get_monitor_effective_free_space',
            msgpack.packb([
                namespace,
                request_params
            ])
        )
        return samples
    except Exception as e:
        logging.error(e)
        logging.error(traceback.format_exc())
        raise
Beispiel #14
0
def json_command_status(uid):
    resp = cocaine_request(
        'get_command',
        msgpack.packb([uid.encode('utf-8')])
    )
    resp = mastermind_response(resp)

    url = STATE_URL_TPL.format(
        host=resp['host'],
        port=MINIONS_CFG.get('port', 8081),
        uid=uid,
    )

    req = urllib2.Request(url)
    if 'authkey' in MINIONS_CFG:
        req.add_header('X-Auth', MINIONS_CFG['authkey'])

    try:
        r = urllib2.urlopen(
            req,
            timeout=MINIONS_CFG.get('timeout', 5),
        )
        command_response = json.loads(r.read())
    except Exception as e:
        resp['output'] = 'Failed to fetch stdout from minions: {}'.format(e)
        resp['error_output'] = 'Failed to fetch stderr from minions: {}'.format(e)
    else:
        if command_response['status'] == 'success':
            command_data = command_response['response'][uid]
            resp['output'] = command_data['output']
            resp['error_output'] = command_data['error_output']
        else:
            error = command_response['error']
            resp['output'] = 'Failed to fetch stdout from minions: {}'.format(error)
            resp['error_output'] = 'Failed to fetch stderr from minions: {}'.format(error)

    return resp
Beispiel #15
0
def json_jobs_filter():
    limit = request.args.get('limit', 50)
    offset = request.args.get('offset', 0)

    types = request.args.getlist('job_types') or None
    statuses = request.args.getlist('job_statuses') or None

    min_create_ts = dt_to_ts(
        request.args.get('min_create_ts'),
        format=JOBS_FILTER_DT_FIELD_FORMAT,
    )
    max_create_ts = dt_to_ts(
        request.args.get('max_create_ts'),
        format=JOBS_FILTER_DT_FIELD_FORMAT,
    )
    min_finish_ts = dt_to_ts(
        request.args.get('min_finish_ts'),
        format=JOBS_FILTER_DT_FIELD_FORMAT,
    )
    max_finish_ts = dt_to_ts(
        request.args.get('max_finish_ts'),
        format=JOBS_FILTER_DT_FIELD_FORMAT,
    )

    ids = None
    ids_values = json.loads(request.args.get('tags_ids'))
    if ids_values:
        ids = ids_values

    def ident(x):
        return x

    tag_types = (
        ('namespaces', 'namespaces', ident),
        ('couples', 'couple_ids', int),
        ('groupsets', 'groupset_ids', ident),
        ('groups', 'group_ids', int),
        ('hostnames', 'hostnames', ident),
        ('paths', 'paths', ident),
    )

    tags = {}
    for tag_type, tag_request_type, map_processor in tag_types:
        tag_values = json.loads(request.args.get('tags_' + tag_type))
        if tag_values:
            tags[tag_request_type] = map(map_processor, tag_values)

    params = {
        'ids': ids,
        'types': types,
        'statuses': statuses,
        'tags': tags,
        'min_create_ts': min_create_ts,
        'max_create_ts': max_create_ts,
        'min_finish_ts': min_finish_ts,
        'max_finish_ts': max_finish_ts,
        'limit': limit,
        'offset': offset,
    }

    logging.debug('Job filter request params: {}'.format(params))

    try:
        resp = cocaine_request('get_job_list', msgpack.packb([params]))

        def convert_tss_to_dt(d):
            if d.get('create_ts'):
                d['create_ts'] = ts_to_dt(d['create_ts'])
            if d['start_ts']:
                d['start_ts'] = ts_to_dt(d['start_ts'])
            if d['finish_ts']:
                d['finish_ts'] = ts_to_dt(d['finish_ts'])

        for r in resp['jobs']:
            convert_tss_to_dt(r)
            for error_msg in r.get('error_msg', []):
                error_msg['ts'] = ts_to_dt(error_msg['ts'])
            for task in r['tasks']:
                convert_tss_to_dt(task)

        return resp
    except Exception as e:
        logging.error(e)
        logging.error(traceback.format_exc())
        raise