mirror of
https://github.com/newnius/YAO-portal.git
synced 2025-06-06 07:11:54 +00:00
211 lines
5.9 KiB
PHP
211 lines
5.9 KiB
PHP
<?php
|
|
|
|
require_once('predis/autoload.php');
|
|
|
|
require_once('util4p/util.php');
|
|
require_once('util4p/CRObject.class.php');
|
|
require_once('util4p/AccessController.class.php');
|
|
require_once('util4p/CRLogger.class.php');
|
|
|
|
require_once('Code.class.php');
|
|
require_once('JobManager.class.php');
|
|
require_once('Spider.class.php');
|
|
|
|
require_once('config.inc.php');
|
|
require_once('init.inc.php');
|
|
|
|
function job_submit(CRObject $job)
|
|
{
|
|
if (!AccessController::hasAccess(Session::get('role', 'visitor'), 'job.submit')) {
|
|
$res['errno'] = Code::NO_PRIVILEGE;
|
|
return $res;
|
|
}
|
|
$job->set('created_by', Session::get('uid'));
|
|
$job->set('created_at', time());
|
|
|
|
/* 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->get('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);
|
|
$msg = json_decode($spider->getBody(), true);
|
|
|
|
$res['errno'] = Code::SUCCESS;
|
|
if ($msg['code'] !== 0) {
|
|
$res['errno'] = Code::FAIL;
|
|
$res['msg'] = $msg['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);
|
|
return $res;
|
|
}
|
|
|
|
function job_stop(CRObject $job)
|
|
{
|
|
if (!AccessController::hasAccess(Session::get('role', 'visitor'), 'job.stop')) {
|
|
$res['errno'] = Code::NO_PRIVILEGE;
|
|
return $res;
|
|
}
|
|
/* TODO: permission check */
|
|
$spider = new Spider();
|
|
$data['id'] = $job->get('id', '');
|
|
$spider->doPost(YAO_SCHEDULER_ADDR . '?action=job_stop', $data);
|
|
$msg = json_decode($spider->getBody(), true);
|
|
|
|
$res['errno'] = Code::SUCCESS;
|
|
if ($msg['code'] !== 0) {
|
|
$res['errno'] = Code::FAIL;
|
|
$res['msg'] = $msg['error'];
|
|
return $res;
|
|
}
|
|
$log = new CRObject();
|
|
$log->set('scope', Session::get('uid'));
|
|
$log->set('tag', 'job.stop');
|
|
$content = array('id' => $job->get('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'] !== null ? $msg['code'] : Code::UNKNOWN_ERROR;
|
|
$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;
|
|
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'] !== null ? $msg['code'] : Code::UNKNOWN_ERROR;
|
|
$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;
|
|
}
|