{% extends "base.html" %} {% block title %}Job {{ job['job_index'] }}, Dataset {{ dataset['dataset'] }} - IceProd{% end %} {% block page_title %}Job Details{% end %} {% block body %}
{% for k in job %}
{{ escape(k) }}
{% if k == 'dataset_id' %} {{ escape(job[k]) }} {% elif k == 'tasks' %} {% else %} {{ job[k] }} {% end %}
{% end %} {% if (current_user) %}
{% if job['status'] in states.job_prev_statuses(states.JOB_STATUS_START) %} {% end %} {% if job['status'] in states.job_prev_statuses('suspended') %} {% end %}
{% end %}

Tasks

{% for task in job['tasks'] %} {% end %}
Name Type Status Failures Walltime Walltime Err
{{ task['name'] }} {{ 'GPU' if 'gpu' in task['requirements'] and task['requirements']['gpu'] else 'CPU' }} {{ task['status'] }} {{ task['failures'] }} {{ '{:.2f}'.format(task['walltime']/3600) }} {{ '{:.2f}'.format(task['walltime_err']/3600) }}
{% end %} {% block body_scripts %} {% if (current_user) %} {% module SecureScript(content=f""" var rest_api = '{ rest_api }'; const passkey = "{ passkey }"; const dataset_id = "{ job['dataset_id'] if job else '' }"; const job_id = "{ job['job_id'] if job else '' }"; """) %} {% module SecureScript(content=""" function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } async function service_worker(action) { try { const url = '/actions/job_status'; const args = { dataset_id: dataset_id, action: action, job_ids: [job_id], }; const ret = await fetch_json('POST', url, args, passkey); if ('error' in ret) { message_alert('error - '+ret['error']); return false; } const id = ret['result']; while (true) { await sleep(1000); const url = '/actions/job_status/'+id; const ret = await fetch_json('GET', url, null, passkey); if (ret['status'] == 'error') { if ('error_message' in ret) { message_alert('error - '+ret['error_message']); } else { message_alert('error - '+action+' failed'); } return false; } else if (ret['status'] == 'complete') { message('complete'); break; } else if ('payload' in ret && 'progress' in ret['payload']) { message('progress - '+ret['payload']['progress']+'%') } } } catch(err) { message_alert('error - '+err); return false; } reload(); return true; } async function job_reset() { return await service_worker('reset') } async function job_hard_reset() { return await service_worker('hard_reset') } async function job_suspend() { return await service_worker('suspend') } """) %} {% end %} {% end %}