function register_events_job() { $('#btn-job-add').click(function (e) { var cb = function (workspaces) { $('#form-job-workspace').children().remove(); $.each(workspaces, function (i, workspace) { var newGroupOption = ''; $('#form-job-workspace').append(newGroupOption); }); }; wordspace_gets(null, cb); var cb_cluster = function (clusters) { $('#form-job-cluster').children().remove(); $.each(clusters, function (i, cluster) { var newGroupOption = ''; $('#form-job-cluster').append(newGroupOption); }); }; cluster_gets(cb_cluster); $('#form-job-name').val(''); $('#form-job-priority').val(25); $('#form-job-cluster').val(1); $('#modal-job').modal('show'); }); $('#form-job-tasks').on('click', '.task-remove', function (e) { if ($('#form-job-tasks').find('.row').length <= 1) { return; } var task = $(this).parent().parent().parent(); task.remove(); }); $('#form-job-task-add').click(function (e) { var tasks = $('#form-job-tasks'); var newTask = $('#form-job-tasks').find('.row').eq(0).clone(); tasks.append(newTask); }); $("#form-job-submit").click(function (e) { var name = $('#form-job-name').val(); var workspace = $('#form-job-workspace').val(); var cluster = $('#form-job-cluster').val(); var priority = $('#form-job-priority').val(); var run_before = $('#form-job-run-before').val(); if (run_before.length !== 0) { run_before = moment(run_before).unix(); } var tasks = []; $('#form-job-tasks').find('.row').each(function () { var task = {}; task['name'] = $(this).find('.task-name').eq(0).val(); task['image'] = $(this).find('.task-image').eq(0).val(); task['cmd'] = $(this).find('.task-cmd').eq(0).val(); task['cpu_number'] = $(this).find('.task-cpu').eq(0).val(); task['memory'] = $(this).find('.task-mem').eq(0).val(); task['gpu_number'] = $(this).find('.task-gpu-num').eq(0).val(); task['gpu_memory'] = $(this).find('.task-gpu-mem').eq(0).val(); tasks.push(task); }); /* TODO validate form */ if (name.length === 0) { return true; } $.each(tasks, function (i, task) { if (task['name'].length === 0) { return true; } }); $('#modal-job').modal('hide'); var ajax = $.ajax({ url: "service?action=job_submit", type: 'POST', data: { name: name, workspace: workspace, cluster: cluster, priority: priority, run_before: run_before, tasks: JSON.stringify(tasks) } }); ajax.done(function (res) { if (res["errno"] !== 0) { $("#modal-msg-content").html(res["msg"]); $("#modal-msg").modal('show'); } $('#table-job').bootstrapTable("refresh"); }); ajax.fail(function (jqXHR, textStatus) { $("#modal-msg-content").html("Request failed : " + jqXHR.statusText); $("#modal-msg").modal('show'); $('#table-job').bootstrapTable("refresh"); }); }); } function load_jobs(scope) { $("#table-job").bootstrapTable({ url: 'service?action=job_list&who=' + scope, responseHandler: jobResponseHandler, sidePagination: 'server', cache: true, striped: true, pagination: true, pageSize: 10, pageList: [10, 25, 50, 100, 200], search: false, showColumns: true, showRefresh: true, showToggle: false, showPaginationSwitch: true, minimumCountColumns: 2, clickToSelect: false, sortName: 'nobody', sortOrder: 'desc', smartDisplay: true, mobileResponsive: true, showExport: true, columns: [{ field: 'created_by', title: 'Created By', align: 'center', valign: 'middle', formatter: UIDFormatter, visible: scope === 'all' }, { field: 'name', title: 'Name', align: 'center', valign: 'middle', escape: true }, { field: 'workspace', title: 'Workspace', align: 'center', valign: 'middle', visible: false, formatter: workspaceFormatter }, { field: 'group', title: 'Virtual Cluster', align: 'center', valign: 'middle', formatter: clusterFormatter }, { field: 'priority', title: 'Priority', align: 'center', valign: 'middle', formatter: priorityFormatter }, { field: 'run_before', title: 'Run Before', align: 'center', valign: 'middle', visible: false, formatter: timeFormatter }, { field: 'created_at', title: 'Created At', align: 'center', valign: 'middle', formatter: timeFormatter }, { field: 'updated_at', title: 'Updated At', align: 'center', valign: 'middle', formatter: timeFormatter }, { field: 'status', title: 'Status', align: 'center', valign: 'middle', formatter: statusFormatter, visible: true }, { field: 'operate', title: 'Operate', align: 'center', events: jobOperateEvents, formatter: jobOperateFormatter }] }); } var UIDFormatter = function (UID) { return UID; }; var workspaceFormatter = function (workspace) { return workspace; }; var clusterFormatter = function (cluster) { return cluster; }; var priorityFormatter = function (status) { status = parseInt(status); switch (status) { case 1: return 'Low'; case 25: return 'Medium'; case 50: return 'High'; case 99: return 'Urgent'; } return 'Unknown (' + status + ')'; }; var statusFormatter = function (status) { status = parseInt(status); switch (status) { case 0: return 'Submitted'; case 1: return 'Starting'; case 2: return 'Running'; case 3: return 'Stopped'; case 4: return 'Finished'; } return 'Unknown(' + status + ')'; }; function jobResponseHandler(res) { if (res['errno'] === 0) { var tmp = {}; tmp["total"] = res["count"]; tmp["rows"] = res["jobs"]; return tmp; } $("#modal-msg-content").html(res["msg"]); $("#modal-msg").modal('show'); return []; } function jobOperateFormatter(value, row, index) { var div = '