Пример #1
0
def check_guests(swarm):
    query_api = ZoeQueryAPI(get_conf().scheduler_url, 'zoeadmin', get_conf().zoeadmin_password)
    exec_api = ZoeExecutionsAPI(get_conf().scheduler_url, 'zoeadmin', get_conf().zoeadmin_password)
    cont_api = ZoeContainerAPI(get_conf().scheduler_url, 'zoeadmin', get_conf().zoeadmin_password)

    guests = query_api.query('user', role='guest')
    execs = exec_api.list()
    for guest in guests:
        my_execs = [e for e in execs if e['owner'] == guest['id']]
        for my_exec in my_execs:
            if len(my_exec['containers']) == 0:
                continue
            my_exec_since_started = datetime.datetime.now() - dateutil.parser.parse(my_exec['time_started'])
            my_exec_since_started = my_exec_since_started.total_seconds()
            terminate = False
            for c in my_exec['containers']:
                c = cont_api.get(c)
                for port in c['ports']:
                    if port['name'] == 'Spark application web interface':
                        if check_spark_job(swarm, c['docker_id'], my_exec_since_started):
                            log.info('Execution {} for user {} has been idle for too long, terminating...'.format(my_exec['name'], guest['name']))
                            terminate = True
                            break
                    if terminate:
                        break
            if terminate:
                exec_api.terminate(my_exec['id'])
Пример #2
0
def exec_list_cmd(_):
    exec_api = ZoeExecutionsAPI(utils.zoe_url(), utils.zoe_user(), utils.zoe_pass())
    api_user = ZoeUserAPI(utils.zoe_url(), utils.zoe_user(), utils.zoe_pass())
    data = exec_api.list()
    for e in data:
        user = api_user.get(e['owner'])
        print('Execution {} (User: {}, ID: {}): {}'.format(e['name'], user['name'], e['id'], e['status']))
Пример #3
0
def exec_list_cmd(_):
    exec_api = ZoeExecutionsAPI(utils.zoe_url(), utils.zoe_user(),
                                utils.zoe_pass())
    data = exec_api.list()
    for e in data:
        print('Execution {} (User: {}, ID: {}): {}'.format(
            e['name'], e['user_id'], e['id'], e['status']))
Пример #4
0
def exec_kill_user_cmd(auth, args):
    """Terminates all executions for the given user."""
    exec_api = ZoeExecutionsAPI(auth['url'], auth['user'], auth['pass'])
    filters = {'status': 'running', 'user_id': args.user_id}
    data = exec_api.list(**filters)
    print('Terminating {} executions belonging to user {}'.format(
        len(data), args.user_id))
    for execution in data:
        exec_api.terminate(execution)
        print('Execution {} terminated'.format(execution))
Пример #5
0
def delete_finished():
    """Delete finished executions from Zoe."""
    exec_api = ZoeExecutionsAPI(zoe_url(), zoe_user(), zoe_pass())
    execs = exec_api.list()
    for e_id in execs:
        e = exec_api.get(e_id)
        if e is None:
            continue
        if e['name'] == 'boinc-loader' and e['status'] == 'terminated':
            print('Execution {} has finished, deleting...'.format(e_id))
            exec_api.delete(e['id'])
Пример #6
0
def exec_list_cmd(request):
    print("zoe api: exec_list_cmd")
    token = zoe_api(request)
    headers = dict()
    headers["X-Auth-Token"] = str(token)
    headers['Content-Type'] = "text/plain"

    exec_api = ZoeExecutionsAPI(ZOE_URL, ZOE_USER, ZOE_PWD)
    data = exec_api.list()

    url = URL_BASIC + "/sdscontroller/executions"
    r = requests.get(url, headers=headers)
    return r, data
Пример #7
0
def count_jobs(all=False):
    """Count how many zapps have already been submitted."""
    exec_api = ZoeExecutionsAPI(zoe_url(), zoe_user(), zoe_pass())
    execs = exec_api.list()
    count = 0
    for e_id in execs:
        e = exec_api.get(e_id)
        if e is None:
            continue
        elif not all and e['name'] != 'boinc-loader':
            continue
        if e['status'] != 'terminated':
            count += 1
    return count
Пример #8
0
def exec_list_cmd(auth, args):
    """List executions"""
    exec_api = ZoeExecutionsAPI(auth['url'], auth['user'], auth['pass'])
    filter_names = [
        'status', 'name', 'limit', 'earlier_than_submit', 'earlier_than_start',
        'earlier_than_end', 'later_than_submit', 'later_than_start',
        'later_than_end'
    ]
    filters = {'user_id': auth['user']}
    for key, value in vars(args).items():
        if key in filter_names:
            filters[key] = value
    data = exec_api.list(**filters)
    if len(data) == 0:
        return
    tabular_data = [[e['id'], e['name'], e['user_id'], e['status']]
                    for e in sorted(data.values(), key=lambda x: x['id'])]
    headers = ['ID', 'Name', 'User ID', 'Status']
    print(tabulate(tabular_data, headers))
Пример #9
0
def main():
    """Main."""
    exec_api = ZoeExecutionsAPI(zoe_url(), zoe_user(), zoe_pass())
    execs = exec_api.list()
    print('id,time_submit,time_start,time_end,cpu_usage,mem_usage,net_rx_usage,net_tx_usage,blkio_usage')
    for e_id in execs:
        e = exec_api.get(e_id)
        if e['name'] != 'boinc-loader' or e['status'] != 'terminated':
            continue
        trace_line = {
            'id': e['id'],
            'time_submit': e['time_submit'],
            'time_start': e['time_start'],
            'time_end': e['time_end'],
            'cpu_usage': get_influx_cpu_data(e_id),
            'mem_usage': get_influx_mem_data(e_id),
            'net_rx_usage': get_influx_net_rx_data(e_id),
            'net_tx_usage': get_influx_net_tx_data(e_id),
            'blkio_usage': get_influx_blkio_data(e_id)
        }
        print('{id},{time_submit},{time_start},{time_end},{cpu_usage},{mem_usage},{net_rx_usage},{net_tx_usage},{blkio_usage}'.format(**trace_line))
Пример #10
0
def check_guests(swarm):
    query_api = ZoeQueryAPI(get_conf().master_url, 'zoeadmin',
                            get_conf().zoeadmin_password)
    exec_api = ZoeExecutionsAPI(get_conf().master_url, 'zoeadmin',
                                get_conf().zoeadmin_password)
    cont_api = ZoeServiceAPI(get_conf().master_url, 'zoeadmin',
                             get_conf().zoeadmin_password)

    guests = query_api.query('user', role='guest')
    execs = exec_api.list()
    for guest in guests:
        my_execs = [e for e in execs if e['owner'] == guest['name']]
        for my_exec in my_execs:
            if len(my_exec['services']) == 0:
                continue
            my_exec_since_started = datetime.datetime.now(
            ) - dateutil.parser.parse(my_exec['time_started'])
            my_exec_since_started = my_exec_since_started.total_seconds()
            terminate = False
            for c in my_exec['services']:
                c = cont_api.get(c)
                for port in c['ports']:
                    if port['name'] == 'Spark application web interface':
                        idle_time = check_spark_job(swarm, c['docker_id'],
                                                    my_exec_since_started)
                        if check_if_kill(idle_time):
                            log.info(
                                'Execution {} for user {} has been idle for too long, terminating...'
                                .format(my_exec['name'], guest['name']))
                            terminate = True
                            break
                        else:
                            log.debug(
                                'Execution {} for user {} has been idle for {} seconds'
                                .format(my_exec['name'], guest['name'],
                                        idle_time))
                    if terminate:
                        break
            if terminate:
                exec_api.terminate(my_exec['id'])
Пример #11
0
def exec_list_cmd(_):
    exec_api = ZoeExecutionsAPI(utils.zoe_url(), utils.zoe_user(), utils.zoe_pass())
    data = exec_api.list()
    for e in data:
        print('Execution {} (User: {}, ID: {}): {}'.format(e['name'], e['user_id'], e['id'], e['status']))
Пример #12
0
def exec_list_cmd(args_):
    """List executions"""
    exec_api = ZoeExecutionsAPI(utils.zoe_url(), utils.zoe_user(), utils.zoe_pass())
    data = exec_api.list()
    for e in sorted(data.values(), key=lambda x: x['id']):
        print('Execution {} (User: {}, ID: {}): {}'.format(e['name'], e['user_id'], e['id'], e['status']))