From 0e0c5a6f1e83054774a40f54587f27bbbcf17b37 Mon Sep 17 00:00:00 2001 From: Newnius Date: Wed, 24 Jun 2020 22:46:56 +0800 Subject: [PATCH] update --- ajax.php | 12 +++++++++--- job.logic.php | 26 ++++++++++++++++++++++---- static/job.js | 49 +++++++++++++++++++++++++++++++++++++++++-------- 3 files changed, 72 insertions(+), 15 deletions(-) diff --git a/ajax.php b/ajax.php index f60bcc9..f92269b 100644 --- a/ajax.php +++ b/ajax.php @@ -101,9 +101,15 @@ switch ($action) { case 'job_predict_req': $job = new CRObject(); - $job->set('name', cr_get_POST('name')); - $job->set('cmd', cr_get_POST('cmd')); - $res = job_predict_req($job); + $job->set('name', cr_get_POST('name', '') . '-' . time() . Random::randomInt(1000, 9999)); + $job->set('virtual_cluster', cr_get_POST('cluster')); + $job->set('workspace', cr_get_POST('workspace')); + $job->set('priority', cr_get_POST('priority')); + $job->set('run_before', cr_get_POST('run_before')); + $job->set('locality', cr_get_POST('locality')); + $job->set('tasks', cr_get_POST('tasks')); + $role = cr_get_GET('role'); + $res = job_predict_req($job, $role); break; case 'summary_get': diff --git a/job.logic.php b/job.logic.php index 445a8c3..bc47098 100644 --- a/job.logic.php +++ b/job.logic.php @@ -147,7 +147,7 @@ function job_status(CRObject $job) return $res; } -function job_predict_req(CRObject $job) +function job_predict_req(CRObject $job, $role) { if (!AccessController::hasAccess(Session::get('role', 'visitor'), 'job.list')) { $res['errno'] = Code::NO_PRIVILEGE; @@ -155,7 +155,25 @@ function job_predict_req(CRObject $job) } $spider = new Spider(); - $spider->doGet(YAO_SCHEDULER_ADDR . '?action=job_predict_req&name=' . $job->get('name') . '&cmd=' . $job->get('cmd')); + $tasks = json_decode($job->get('tasks'), true); + foreach ($tasks as $i => $task) { + $task['cpu_number'] = intval($task['cpu_number']); + $task['memory'] = intval($task['memory']); + $task['gpu_number'] = intval($task['gpu_number']); + $task['gpu_memory'] = intval($task['gpu_memory']); + $task['is_ps'] = $task['is_ps'] == 1; + $tasks[$i] = $task; + } + $job->set('tasks', $tasks); + $job->set('workspace', $job->get('workspace')); + $job->set('group', $job->get('virtual_cluster')); + $job->set('priority', $job->getInt('priority')); + $job->set('locality', $job->getInt('locality')); + $job->set('run_before', $job->getInt('run_before')); + $job->set('created_by', $job->getInt('created_by')); + $data['job'] = json_encode($job); + + $spider->doPost(YAO_SCHEDULER_ADDR . '?action=job_predict_req&role=' . $role, $data); $msg = json_decode($spider->getBody(), true); if ($msg === NULL) { @@ -172,8 +190,8 @@ function job_predict_req(CRObject $job) $res['cpu'] = $msg['cpu']; $res['mem'] = $msg['mem']; - $res['gpu'] = $msg['gpu']; - $res['gmem'] = $msg['gmem']; + $res['gpu_util'] = $msg['gpu_util']; + $res['gpu_mem'] = $msg['gpu_mem']; $res['bw'] = $msg['bw']; $res['errno'] = Code::SUCCESS; return $res; diff --git a/static/job.js b/static/job.js index 10654e4..bdf1f4c 100755 --- a/static/job.js +++ b/static/job.js @@ -34,17 +34,50 @@ function register_events_job() { $("#form-job-predict-req").click(function (e) { var name = $('#form-job-name').val(); - var cmd = ''; + 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(); + var locality = $('#form-job-locality').val(); + if (run_before.length !== 0) { + run_before = moment(run_before).unix(); + } + var tasks = []; $('#form-job-tasks').find('.row').each(function () { - cmd = $(this).find('.task-cmd').eq(0).val(); + 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(); + task['is_ps'] = $(this).find('.task-is-ps').eq(0).val(); + task['gpu_model'] = $(this).find('.task-gpu-model').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; + } }); var ajax = $.ajax({ - url: "service?action=job_predict_req", - type: 'GET', + url: "service?action=job_predict_req&role=PS", + type: 'POST', data: { name: name, - cmd: cmd + workspace: workspace, + cluster: cluster, + priority: priority, + run_before: run_before, + locality: locality, + tasks: JSON.stringify(tasks) } }); ajax.done(function (res) { @@ -55,9 +88,9 @@ function register_events_job() { console.log(res); $('#form-job-tasks').find('.row').each(function () { - $(this).find('.task-cpu').eq(0).val(4); - $(this).find('.task-mem').eq(0).val(8192); - $(this).find('.task-gpu-mem').eq(0).val(8192); + $(this).find('.task-cpu').eq(0).val(res['cpu']); + $(this).find('.task-mem').eq(0).val(res['mem']); + $(this).find('.task-gpu-mem').eq(0).val(res['gpu_mem']); }); } });