{% extends "base.html" %}
{% block title %}Dataset {{ dataset_num }} - IceProd{% end %}
{% block description %}{{ dataset["description"] }}{% end %}
{% block sidebar %}
{% end %}
{% block page_title %}Dataset {{ dataset_num }} Details{% end %}
{% block body %}
Settings
{% if (current_user) %}
Reset
Hard Reset
Suspend
Truncate
Delete Logs
{% end %}
Jobs
{% for s in jobs %}
{% end %}
Tasks
{% for s in tasks %}
{% end %}
Task Status by Task Name
{% if task_info %}
{% for key in list(task_info.values())[0] %}
{{ key.capitalize() }}
{% end %}
{% for t in task_info %}
{% for value in task_info[t].values() %}
{{ value }}
{% end %}
{% end %}
{% end %}
Completion Statistics
Name
Avg/stddev (hours)
Max/min (hours)
Eff
{% for t in task_stats %}
{% if 'avg_hrs' in task_stats[t] and task_stats[t]['avg_hrs'] is not None and 'stddev_hrs' in task_stats[t] and task_stats[t]['stddev_hrs'] is not None %}
{{ t }}
{{ '{:0.2f}'.format(task_stats[t]['avg_hrs']) }} / {{ '{:0.2f}'.format(task_stats[t]['stddev_hrs']) }}
{{ '{:0.2f}'.format(task_stats[t]['max_hrs']) }} / {{ '{:0.2f}'.format(task_stats[t]['min_hrs']) }}
{{ '{:d}'.format(int(task_stats[t]['efficiency']*100)) }}%
{% end %}
{% end %}
{% end %}
{% block body_scripts %}
{% if (current_user) %}
{% module SecureScript(content=f"""
var rest_api = '{ rest_api }';
const passkey = '{ passkey }';
const dataset_id = '{ dataset_id }';
""") %}
{% module SecureScript(content="""
async function dataset_priority() {
try {
const val = parseFloat($("#dataset_priority").val());
const url = '/datasets/' + dataset_id + '/priority';
const ret = await fetch_json('PUT', url, {'priority': val}, passkey);
if ('error' in ret) {
message_alert('error - '+ret['error']);
return false;
}
} catch(err) {
message_alert('error - '+err);
return false;
}
return true;
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function service_worker(action) {
try {
const url = '/actions/dataset_status';
const args = {
dataset_id: dataset_id,
action: action,
};
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/dataset_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 dataset_reset() {
return await service_worker('reset')
}
async function dataset_hard_reset() {
return await service_worker('hard_reset')
}
async function dataset_suspend() {
return await service_worker('suspend')
}
async function dataset_truncate() {
try {
const url = '/datasets/' + dataset_id + '/dataset_actions/truncate';
const ret = await fetch_json('POST', url, {}, passkey);
if ('error' in ret) {
message_alert('error - '+ret['error']);
return false;
}
} catch(err) {
message_alert('error - '+err);
return false;
}
reload();
return true;
}
async function dataset_delete_logs(dataset_id, passkey) {
message("Deleting logs... 0% complete");
try {
const url = '/datasets/' + dataset_id + '/logs';
for await (const ret of fetch_json('DELETE', url, {}, passkey)) {;
if ('error' in ret) {
message_alert('error - '+ret['error']);
return false;
} else if ('percent_complete' in ret) {
message('Deleting logs... ' + ret['percent_complete'].toFixed(2) + '% complete');
}
if ('status' in ret && ret['status'] == 'complete') {
break;
}
}
} catch(err) {
message_alert('error - '+err);
return false;
}
message_close();
return true;
}
""") %}
{% end %}
{% end %}