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'])
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']))
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']))
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))
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'])
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
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
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))
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))
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'])
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']))
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']))