{% extends "base.html" %} {% block js %} function update_submissions_status(response) { var table = $("#submissions_status_table > tbody"); var msg = utils.standard_response(response); if (msg != "") { table.html(''+ msg + ''); return; } var strings = [] strings.push('Scored' + response['data']['scored'] + ''); if (response['data']['scoring'] != 0) strings.push('Scoring...' + response['data']['scoring'] + ''); if (response['data']['compilation_fail'] != 0) strings.push('Compilation failed' + response['data']['compilation_fail'] + ''); if (response['data']['compiling'] != 0) strings.push('Compiling...' + response['data']['compiling'] + ''); if (response['data']['evaluating'] != 0) strings.push('Evaluating...' + response['data']['evaluating'] + ''); if (response['data']['max_compilations'] != 0) strings.push('Cannot compile (please check)' + response['data']['max_compilations'] + ''); if (response['data']['max_evaluations'] != 0) strings.push('Cannot evaluate (please check)' + response['data']['max_evaluations'] + ''); table.html(strings.join("")); }; function update_queue_status(response) { var table = $("#queue_status_table > tbody"); var msg = utils.standard_response(response); if (msg != "") { table.html(''+ msg + ''); return; } var l = response['data'].length; if (l == 0) { table.html('Queue empty.'); return; } var strings = []; for (var i = 0; i < l; i++) { var job = utils.repr_job(response['data'][i]['item']); var date = utils.repr_time_ago(response['data'][i]['timestamp']); strings.push('' + (i + 1) + ''); strings.push('' + job + ''); strings.push('' + response['data'][i]['priority'] + ''); strings.push('' + date + ''); } table.html(strings.join("")); }; function enable_worker(shard) { if (confirm("Do you really want to enable worker " + shard + "?")) { cmsrpc_request("EvaluationService", 0, "enable_worker", {"shard":shard}, function() { cmsrpc_request("EvaluationService", 0, "workers_status", {}, update_workers_status); }); } } function disable_worker(shard) { if (confirm("Do you really want to disable worker " + shard + "?")) { cmsrpc_request("EvaluationService", 0, "disable_worker", {"shard":shard}, function() { cmsrpc_request("EvaluationService", 0, "workers_status", {}, update_workers_status); }); } } function update_workers_status(response) { var table = $("#workers_status_table > tbody"); var msg = utils.standard_response(response); if (msg != "") { table.html(''+ msg + ''); return; } var l = response['data'].length; if (l == 0) { table.html('No workers found.'); return; } var strings = []; for (var i in response['data']) { var job = ""; if ($.isArray(response['data'][i]['operations'])) { job = utils.repr_job(response['data'][i]['operations'][0]); if (response['data'][i]['operations'].length > 1) { job += ' and ' + (response['data'][i]['operations'].length - 1) + ' more'; } } else { job = utils.repr_job(response['data'][i]['operations']); } var start_time = utils.repr_time_ago(response['data'][i]['start_time']); var connected = "Yes"; if (response['data'][i]['connected'] == false) connected = "No"; strings.push('' + i + ''); strings.push('' + connected + ''); strings.push('' + job + ''); strings.push('' + start_time + ''); if (response['data'][i]['operations'] == "disabled") { strings.push(''); } else { strings.push(''); } strings.push(''); } table.html(strings.join("")); }; function link_submissions(s) { return s.replace(/submission ([0-9]+)/g, function (match, n, offset, string) { return 'submission ' + n + ''; }); } function escape_html(s) { return $("
").text(s).html(); } function update_logs(response) { var table = $("#logs_table > tbody"); var msg = utils.standard_response(response); if (msg != "") { table.html(''+ msg + ''); return; } var l = response['data'].length; if (l == 0) { table.html('No log entries.'); return; } var new_table = $(''); response['data'] = response['data'].reverse(); for (i in response['data']) { var message = link_submissions(escape_html(response['data'][i]['message'])); var coord = response['data'][i]['coord']; var operation = link_submissions(escape_html(response['data'][i]['operation'])); var severity = response['data'][i]['severity']; var timestamp = utils.format_time_or_date(response['data'][i]['timestamp']); var row = $(''); row.append($('').text(timestamp)); row.append($('').text(severity)); row.append($('').text(coord)); // We inject it as HTML rather than text because we escaped it before // and because we need to preserve the links to the submission pages. row.append($('').html(operation)); row.append($('').append($('
').html(message)));
        new_table.append(row);
    }
    table.replaceWith(new_table);
}

function update_statuses()
{

    {% if contest is not none %}
    if (!update_statuses.submissions_request
            || update_statuses.submissions_request.state() != "pending") {
        update_statuses.submissions_request =
            cmsrpc_request("AdminWebServer", 0,
                           "submissions_status",
                           {"contest_id": {{ contest.id }}},
                           update_submissions_status);
    }
    {% endif %}
    if (!update_statuses.queue_request
            || update_statuses.queue_request.state() != "pending") {
        update_statuses.queue_request =
            cmsrpc_request("EvaluationService", 0,
                           "queue_status",
                           {},
                           update_queue_status);
    }
    cmsrpc_request("EvaluationService", 0,
                   "workers_status",
                   {},
                   update_workers_status);
    cmsrpc_request("LogService", 0,
                   "last_messages",
                   {},
                   update_logs);
}

{% endblock js %}

{% block js_init %}

setInterval(update_statuses, 5000);
update_statuses();

{% endblock js_init %}

{% block core %}

Overview

{% if contest is not none %}

Submissions status

Status Number
loading...
{% endif %}

Queue status

Id Job Priority Since
loading...

Workers status

Shard Connected Current job Since Action
loading...

Logs

Time Severity Service Operation Message
loading...
{% endblock core %}