set('created_by', Session::get('uid')); $job->set('created_at', time()); $res['errno'] = JobManager::add($job) ? Code::SUCCESS : Code::UNKNOWN_ERROR; $log = new CRObject(); $log->set('scope', Session::get('uid')); $log->set('tag', 'job.submit'); $content = array('job' => $job, 'response' => $res['errno']); $log->set('content', json_encode($content)); CRLogger::log($log); /* notify YAO-scheduler */ $spider = new Spider(); $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']); $tasks[$i] = $task; } $job->set('tasks', $tasks); $job->set('workspace', $job->getInt('workspace')); $job->set('virtual_cluster', $job->getInt('virtual_cluster')); $job->set('priority', $job->getInt('priority')); $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_submit', $data); $res['message'] = $spider->getBody(); return $res; } function job_stop(CRObject $job) { if (!AccessController::hasAccess(Session::get('role', 'visitor'), 'job.stop')) { $res['errno'] = Code::NO_PRIVILEGE; return $res; } $origin = JobManager::get($job); if ($origin === null) { $res['errno'] = Code::RECORD_NOT_EXIST; } else if ($origin['created_by'] !== Session::get('uid') && !AccessController::hasAccess(Session::get('role', 'visitor'), 'job.stop_others')) { $res['errno'] = Code::NO_PRIVILEGE; } else if ($origin['status'] !== '0' && $origin['status'] !== '1') { $res['errno'] = Code::RECORD_REMOVED; } else { $origin['status'] = 4; $res['errno'] = JobManager::update(new CRObject($origin)) ? Code::SUCCESS : Code::UNKNOWN_ERROR; } $log = new CRObject(); $log->set('scope', Session::get('uid')); $log->set('tag', 'job.stop'); $content = array('id' => $job->getInt('id'), 'response' => $res['errno']); $log->set('content', json_encode($content)); CRLogger::log($log); return $res; } function job_list(CRObject $rule) { if (!AccessController::hasAccess(Session::get('role', 'visitor'), 'job.list')) { $res['errno'] = Code::NO_PRIVILEGE; return $res; } if ($rule->get('who') !== 'all') { $rule->set('who', 'self'); $rule->set('created_by', Session::get('uid')); } if ($rule->get('who') === 'all' && !AccessController::hasAccess(Session::get('role', 'visitor'), 'job.list_others')) { $res['errno'] = Code::NO_PRIVILEGE; return $res; } $spider = new Spider(); $spider->doGet(YAO_SCHEDULER_ADDR . '?action=jobs'); $msg = json_decode($spider->getBody(), true); if ($msg['code'] !== 0) { $res['errno'] = $msg['code']; $res['msg'] = $msg['error']; return $res; } $res['jobs'] = array_reverse($msg['jobs']); for ($i = 0; $i < sizeof($res['jobs']); $i++) { $res['jobs'][$i]['tasks'] = json_encode($res['jobs'][$i]['tasks']); if ($res['jobs'][$i]['run_before'] === 0) { $res['jobs'][$i]['run_before'] = null; } } $res['errno'] = Code::SUCCESS; //$res['jobs'] = JobManager::gets($rule); //$res['count'] = JobManager::count($rule); //$res['errno'] = $res['jobs'] === null ? Code::FAIL : Code::SUCCESS; return $res; } function job_status(CRObject $job) { if (!AccessController::hasAccess(Session::get('role', 'visitor'), 'job.list')) { $res['errno'] = Code::NO_PRIVILEGE; return $res; } $spider = new Spider(); $spider->doGet(YAO_SCHEDULER_ADDR . '?action=job_status&id=' . $job->get('name')); $msg = json_decode($spider->getBody(), true); if ($msg['code'] !== 0) { $res['errno'] = $msg['code']; $res['msg'] = $msg['error']; return $res; } $res['tasks'] = $msg['status']; $res['errno'] = Code::SUCCESS; return $res; } function summary_get() { if (!AccessController::hasAccess(Session::get('role', 'visitor'), 'system.summary')) { $res['errno'] = Code::NO_PRIVILEGE; return $res; } $spider = new Spider(); $spider->doGet(YAO_SCHEDULER_ADDR . '?action=summary'); $msg = json_decode($spider->getBody(), true); if ($msg['code'] !== 0) { $res['errno'] = $msg['code']; $res['msg'] = $msg['error']; return $res; } $res['jobs']['finished'] = $msg['jobs_finished']; $res['jobs']['running'] = $msg['jobs_running']; $res['jobs']['pending'] = $msg['jobs_pending']; $res['gpu']['free'] = $msg['gpu_free']; $res['gpu']['using'] = $msg['gpu_using']; $res['errno'] = Code::SUCCESS; return $res; } function task_logs(CRObject $job) { if (!AccessController::hasAccess(Session::get('role', 'visitor'), 'job.list')) { $res['errno'] = Code::NO_PRIVILEGE; return $res; } $spider = new Spider(); $spider->doGet(YAO_SCHEDULER_ADDR . '?action=task_logs&job=' . $job->get('job') . '&task=' . $job->get('task')); $msg = json_decode($spider->getBody(), true); if ($msg['code'] !== 0) { $res['errno'] = $msg['code']; $res['msg'] = $msg['error']; return $res; } $res['logs'] = $msg['logs']; $res['errno'] = Code::SUCCESS; return $res; } function job_describe(CRObject $rule) { if (!AccessController::hasAccess(Session::get('role', 'visitor'), 'job.describe')) { $res['errno'] = Code::NO_PRIVILEGE; return $res; } $res['errno'] = Code::FAIL; $origin = JobManager::get($rule); if ($origin === null) { $res['errno'] = Code::RECORD_NOT_EXIST; } else if ($origin['created_by'] !== Session::get('uid') && !AccessController::hasAccess(Session::get('role', 'visitor'), 'job.describe_others')) { $res['errno'] = Code::NO_PRIVILEGE; } return $res; }