1
0
mirror of https://github.com/newnius/YAO-portal.git synced 2025-06-06 07:11:54 +00:00

update, add virtual cluster management

This commit is contained in:
Newnius 2019-07-30 15:49:09 +08:00
parent b7a13462fd
commit 3d7f919942
4 changed files with 177 additions and 6 deletions

View File

@ -165,6 +165,44 @@ switch ($action) {
$res = workspace_remove($workspace);
break;
case 'cluster_list':
$rule = new CRObject();
$rule->set('offset', cr_get_GET('offset'));
$rule->set('limit', cr_get_GET('limit'));
$rule->set('order', 'latest');
$res = cluster_list($rule);
break;
case 'cluster_add':
$cluster = new CRObject();
$cluster->set('name', cr_get_POST('name'));
$cluster->set('weight', cr_get_POST('weight'));
$cluster->set('reserved', cr_get_POST('reserved'));
$cluster->set('quota_cpu', cr_get_POST('quota_cpu'));
$cluster->set('quota_mem', cr_get_POST('quota_mem'));
$cluster->set('quota_gpu', cr_get_POST('quota_gpu'));
$cluster->set('quota_gpu_mem', cr_get_POST('quota_gpu_mem'));
$res = cluster_add($cluster);
break;
case 'cluster_update':
$cluster = new CRObject();
$cluster->set('name', cr_get_POST('name'));
$cluster->set('weight', cr_get_POST('weight'));
$cluster->set('reserved', cr_get_POST('reserved'));
$cluster->set('quota_cpu', cr_get_POST('quota_cpu'));
$cluster->set('quota_mem', cr_get_POST('quota_mem'));
$cluster->set('quota_gpu', cr_get_POST('quota_gpu'));
$cluster->set('quota_gpu_mem', cr_get_POST('quota_gpu_mem'));
$res = cluster_update($cluster);
break;
case 'cluster_remove':
$cluster = new CRObject();
$cluster->set('name', cr_get_POST('name'));
$res = cluster_remove($cluster);
break;
case 'user_signout':
$res = user_signout();
break;

118
cluster.logic.php Normal file
View File

@ -0,0 +1,118 @@
<?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('config.inc.php');
require_once('init.inc.php');
function cluster_add(CRObject $cluster)
{
if (!AccessController::hasAccess(Session::get('role', 'visitor'), 'cluster.add')) {
$res['errno'] = Code::NO_PRIVILEGE;
return $res;
}
$spider = new Spider();
$data['group'] = json_encode($cluster);
$spider->doPost(YAO_SCHEDULER_ADDR . '?action=group_add', $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', 'cluster.add');
$content = array('cluster' => $cluster, 'response' => $res['errno']);
$log->set('content', json_encode($content));
CRLogger::log($log);
return $res;
}
function cluster_remove(CRObject $cluster)
{
if (!AccessController::hasAccess(Session::get('role', 'visitor'), 'cluster.remove')) {
$res['errno'] = Code::NO_PRIVILEGE;
return $res;
}
// TODO: check owner
$spider = new Spider();
$data['group'] = json_encode($cluster);
$spider->doPost(YAO_SCHEDULER_ADDR . '?action=group_remove', $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', 'cluster.remove');
$content = array('cluster' => $cluster, 'response' => $res['errno']);
$log->set('content', json_encode($content));
CRLogger::log($log);
return $res;
}
function cluster_update(CRObject $cluster)
{
if (!AccessController::hasAccess(Session::get('role', 'visitor'), 'cluster.update')) {
$res['errno'] = Code::NO_PRIVILEGE;
return $res;
}
//TODO: check owner
$spider = new Spider();
$data['group'] = json_encode($cluster);
$spider->doPost(YAO_SCHEDULER_ADDR . '?action=group_update', $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', 'cluster.update');
$content = array('cluster' => $cluster, 'response' => $res['errno']);
$log->set('content', json_encode($content));
CRLogger::log($log);
return $res;
}
function cluster_list(CRObject $rule)
{
if (!AccessController::hasAccess(Session::get('role', 'visitor'), 'cluster.list')) {
$res['errno'] = Code::NO_PRIVILEGE;
return $res;
}
$spider = new Spider();
$spider->doGet(YAO_SCHEDULER_ADDR . '?action=group_list');
$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['clusters'] = $msg['groups'];
$res['errno'] = Code::SUCCESS;
return $res;
}

View File

@ -218,29 +218,40 @@
<input type="text" id="form-cluster-name" class="form-control" maxlength="16"
placeholder="virtual cluster name" required/>
</div>
<label>Weight</label>
<div class="form-group form-group-lg">
<label for="form-cluster-weight" class="sr-only">Weight</label>
<input type="number" id="form-cluster-weight" class="form-control" min="0" step="1"
value="10" placeholder=""/>
</div>
<label>Reserved</label>
<div class="form-group form-group-lg">
<label for="form-cluster-reserved" class="sr-only">Reserved</label>
<input type="checkbox" id="form-cluster-reserved"/>&nbsp;&nbsp;Reserved?
</div>
<label>GPU Number</label>
<div class="form-group form-group-lg">
<label for="form-cluster-quota-gpu-number" class="sr-only">GPU number</label>
<input type="number" id="form-cluster-quota-gpu-number" class="form-control" min="0" step="1"
placeholder=""/>
value="0" placeholder=""/>
</div>
<label>GPU Memory (Total)</label>
<label>GPU Memory (Each)</label>
<div class="form-group form-group-lg">
<label for="form-cluster-quota-gpu-memory" class="sr-only">GPU Memory</label>
<input type="number" id="form-cluster-quota-gpu-memory" class="form-control" min="0" step="1024"
placeholder="(MB)"/>
value="10240" placeholder="(MB)"/>
</div>
<label>CPU</label>
<div class="form-group form-group-lg">
<label for="form-cluster-quota-cpu" class="sr-only">CPU</label>
<input type="number" id="form-cluster-quota-cpu" class="form-control" placeholder="" min="0"
step="1"/>
value="0" step="1"/>
</div>
<label>Memory (Total)</label>
<div class="form-group form-group-lg">
<label for="form-cluster-quota-mem" class="sr-only">CPU</label>
<input type="number" id="form-cluster-quota-mem" class="form-control" placeholder="(MB)" min="0"
step="1024"/>
value="1024" step="1024"/>
</div>
<div>
<input type="hidden" id="form-cluster-submit-type"/>

View File

@ -6,12 +6,14 @@ function register_events_cluster() {
$("#form-cluster-submit").click(function (e) {
var name = $('#form-cluster-name').val();
var weight = $('#form-cluster-weight').val();
var reserved = $('#form-cluster-reserved').prop("checked");
var quota_gpu = $('#form-cluster-quota-gpu-number').val();
var quota_gpu_mem = $('#form-cluster-quota-gpu-memory').val();
var quota_cpu = $('#form-cluster-quota-cpu').val();
var quota_mem = $('#form-cluster-quota-mem').val();
/* TODO validate form */
/* TODO: validate form */
$('#modal-cluster').modal('hide');
if ($('#form-cluster-submit-type').val() !== 'add')
@ -22,6 +24,8 @@ function register_events_cluster() {
type: 'POST',
data: {
name: name,
weight: weight,
reserved: reserved,
quota_gpu: quota_gpu,
quota_gpu_mem: quota_gpu_mem,
quota_cpu: quota_cpu,