* Finish task #100964.
This commit is contained in:
@@ -88,6 +88,10 @@ CREATE TABLE `zt_artifactrepo` (
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
ALTER TABLE `zt_host` ADD COLUMN `product` varchar(255) NOT NULL DEFAULT '' AFTER `hostType`,ADD COLUMN `testType` varchar(10) NOT NULL DEFAULT '' AFTER `product`;
|
||||
UPDATE `zt_host` SET `testType`='kvm',`type`='normal' WHERE `type`='zahost';
|
||||
UPDATE `zt_host` SET `testType`='node',`type`='normal',`hostType`='physical' WHERE `type`='node' AND `parent`=0;
|
||||
|
||||
INSERT INTO `zt_privmanager` (`parent`, `code`, `type`, `edition`, `vision`, `order`) VALUES (515, 'application', 'package', ',open,biz,max,ipd,', ',rnd,', 5);
|
||||
INSERT INTO `zt_priv` (`module`, `method`, `parent`, `edition`, `vision`, `system`, `order`) VALUES ('space', 'browse', 651, ',open,biz,max,ipd,', ',rnd,', '1', 10),('instance', 'view', 651, ',open,biz,max,ipd,', ',rnd,', '1', 20),('space', 'getStoreAppInfo', 651, ',open,biz,max,ipd,', ',rnd,', '1', 30),('instance', 'install', 651, ',open,biz,max,ipd,', ',rnd,', '1', 40),('instance', 'visit', 651, ',open,biz,max,ipd,', ',rnd,', '1', 50),('instance', 'ajaxStatus', 651, ',open,biz,max,ipd,', ',rnd,', '1', 60),('instance', 'ajaxStart', 651, ',open,biz,max,ipd,', ',rnd,', '1', 70),('instance', 'ajaxStop', 651, ',open,biz,max,ipd,', ',rnd,', '1', 80),('instance', 'ajaxUninstall', 651, ',open,biz,max,ipd,', ',rnd,', '1', 90),('instance', 'upgrade', 651, ',open,biz,max,ipd,', ',rnd,', '1', 100);
|
||||
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
$config->host->create = new stdclass();
|
||||
$config->host->edit = new stdclass();
|
||||
$config->host->changestatus = new stdclass();
|
||||
$config->host->create->requiredFields = 'name,zap,tags,provider,intranet,extranet';
|
||||
$config->host->edit->requiredFields = 'name,zap,tags,provider,intranet,extranet';
|
||||
$config->host->create->intFields = 'cpuNumber,cpuCores,zap';
|
||||
$config->host->create->requiredFields = 'name,tags,provider,intranet,extranet';
|
||||
$config->host->edit->requiredFields = 'name,tags,provider,intranet,extranet';
|
||||
$config->host->create->intFields = 'cpuNumber,cpuCores';
|
||||
$config->host->create->ipFields = 'intranet,extranet';
|
||||
|
||||
$config->host->editor = new stdclass();
|
||||
|
||||
@@ -59,6 +59,13 @@ $config->host->dtable->fieldList['status']['sortType'] = true;
|
||||
$config->host->dtable->fieldList['status']['width'] = 80;
|
||||
$config->host->dtable->fieldList['status']['map'] = $lang->host->statusList;
|
||||
|
||||
$config->host->dtable->fieldList['heartbeat']['title'] = $lang->host->registerDate;
|
||||
$config->host->dtable->fieldList['heartbeat']['name'] = 'heartbeat';
|
||||
$config->host->dtable->fieldList['heartbeat']['type'] = 'datetime';
|
||||
$config->host->dtable->fieldList['heartbeat']['sortType'] = true;
|
||||
$config->host->dtable->fieldList['heartbeat']['width'] = 80;
|
||||
$config->host->dtable->fieldList['heartbeat']['map'] = $lang->host->statusList;
|
||||
|
||||
$config->host->actionList = array();
|
||||
$config->host->actionList['online']['icon'] = 'arrow-up';
|
||||
$config->host->actionList['online']['text'] = $lang->host->online;
|
||||
|
||||
+25
-9
@@ -49,6 +49,7 @@ class host extends control
|
||||
$this->loadModel('search')->setSearchParams($this->config->host->search);
|
||||
|
||||
$this->loadModel('tree');
|
||||
$this->app->loadLang('zahost');
|
||||
$this->view->title = $this->lang->host->common;
|
||||
$this->view->hostList = $hostList;
|
||||
$this->view->pager = $pager;
|
||||
@@ -71,29 +72,34 @@ class host extends control
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function create($osName = 'linux')
|
||||
public function create($osName = 'linux', $hostType = 'physical', $isTestNode = 0)
|
||||
{
|
||||
if($_POST)
|
||||
{
|
||||
$id = $this->host->create();
|
||||
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
|
||||
|
||||
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('browse')));
|
||||
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $_POST['testType'] === 'node' && $_POST['$isTestNode'] == 1 ? inlink('view', "id=$id") : inlink('browse')));
|
||||
}
|
||||
|
||||
$this->view->defaultParams = array(
|
||||
'zap' => '8085',
|
||||
'pri' => '100',
|
||||
'bridgeID' => 'br0',
|
||||
'pri' => '100',
|
||||
'bridgeID' => 'br0',
|
||||
);
|
||||
|
||||
$testTypes = $this->lang->host->testTypes;
|
||||
if($hostType != 'physical') unset($testTypes['kvm']);
|
||||
|
||||
$this->view->title = $this->lang->host->create;
|
||||
$this->view->osName = $osName;
|
||||
$this->view->hostType = $hostType;
|
||||
$this->view->testTypes = $testTypes;
|
||||
$this->view->isTestNode = intval($isTestNode);
|
||||
$this->view->position[] = html::a($this->createLink('host', 'browse'), $this->lang->host->common);
|
||||
$this->view->position[] = $this->lang->host->create;
|
||||
|
||||
$this->view->rooms = $this->loadModel('serverroom')->getPairs();
|
||||
$this->view->accounts = $this->loadModel('account')->getPairs();
|
||||
$this->view->products = $this->loadModel('product')->getPairs('', 0, '', 'all');
|
||||
$this->view->optionMenu = $this->loadModel('tree')->getOptionMenu(0, 'host');
|
||||
|
||||
$this->display();
|
||||
@@ -105,7 +111,7 @@ class host extends control
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function edit($id, $osName = '')
|
||||
public function edit($id, $osName = '', $hostType = 'physical', $isTestNode = -1)
|
||||
{
|
||||
if($_POST)
|
||||
{
|
||||
@@ -118,19 +124,29 @@ class host extends control
|
||||
if(!empty($changes)) $this->action->logHistory($actionID, $changes);
|
||||
}
|
||||
|
||||
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'load' => inlink('browse'), 'closeModal' => true));
|
||||
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $_POST['testType'] === 'node' && $_POST['isTestNode'] == 1 ? inlink('view', "id=$id") : inlink('browse'), 'closeModal' => true));
|
||||
}
|
||||
|
||||
$host = $this->host->getById($id);
|
||||
$testTypes = $this->lang->host->testTypes;
|
||||
if($hostType != 'physical') unset($testTypes['kvm']);
|
||||
if($isTestNode == -1) $isTestNode = $host->testType ? 1 : 0;
|
||||
|
||||
$this->view->osName = $osName;
|
||||
$this->view->hostType = $hostType;
|
||||
$this->view->testTypes = $testTypes;
|
||||
$this->view->isTestNode = intval($isTestNode);
|
||||
$this->view->accounts = $this->loadModel('account')->getPairs();
|
||||
$this->view->title = $this->lang->host->edit;
|
||||
$this->view->position[] = html::a($this->createLink('host', 'browse'), $this->lang->host->common);
|
||||
$this->view->position[] = $this->lang->host->edit;
|
||||
|
||||
$this->view->host = $this->host->getById($id);
|
||||
$this->view->host = $host;
|
||||
$this->view->osName = $osName ? $osName : $this->view->host->osName;
|
||||
$this->view->accounts = $this->loadModel('account')->getPairs();
|
||||
$this->view->rooms = $this->loadModel('serverroom')->getPairs();
|
||||
$this->view->optionMenu = $this->loadModel('tree')->getOptionMenu(0, 'host');
|
||||
$this->view->products = $this->loadModel('product')->getPairs('', 0, '', 'all');
|
||||
|
||||
$this->display();
|
||||
}
|
||||
|
||||
@@ -6,3 +6,5 @@
|
||||
#mainNavbar .nav-item>a {padding-right: 0.5rem}
|
||||
#mainNavbar .nav-item>.active {color: unset; font-weight: 700;}
|
||||
#mainNavbar .nav-item>a.active:after {position: absolute; content: ''; border-bottom: 2px solid #2e7fff; inset: 0 6px 0 15px;}
|
||||
.form-grid .form-label{width: 8rem;}
|
||||
.form-grid .form-group{padding-left: 8rem;}
|
||||
@@ -11,7 +11,27 @@ window.renderCell = function(result, {col, row})
|
||||
if(col.name === 'osVersion')
|
||||
{
|
||||
const{osName, osVersion} = row.data;
|
||||
if(osName) result[0] = {html: hostLang[osName + 'List'][osVersion]};
|
||||
if(osName && osVersion != '') result[0] = {html: hostLang[osName + 'List'][osVersion]};
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
if(col.name === 'status')
|
||||
{
|
||||
let status = '';
|
||||
if(row.data.testType === '')
|
||||
{
|
||||
status = hostLang.statusList[row.data.status];
|
||||
result[0] = {html: status};
|
||||
}
|
||||
else
|
||||
{
|
||||
status = zahostLang.statusList[row.data.status];
|
||||
let html = "<span class=''>" + status + "</span>";
|
||||
if(row.data.status === 'wait') html = "<span class='text-danger'>" + status + "</span>";
|
||||
result[0] = {html: html};
|
||||
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,18 @@
|
||||
var params = 'osName={osName}&hostType={hostType}&isTestNode={isTestNode}';
|
||||
window.osChange = function(e)
|
||||
{
|
||||
loadPage($.createLink('host', 'create', 'osName=' + e.target.value), '#osVersion');
|
||||
var currentParam = params.replace('{osName}', e.target.value).replace('{hostType}', hostType).replace('{isTestNode}', isTestNode);
|
||||
loadPage($.createLink('host', 'create', currentParam), '#osVersion');
|
||||
}
|
||||
window.hostTypeChange = function(e)
|
||||
{
|
||||
var currentParam = params.replace('{osName}', osName).replace('{hostType}', e.target.value).replace('{isTestNode}', isTestNode);
|
||||
loadPage($.createLink('host', 'create', currentParam), '#testType');
|
||||
}
|
||||
|
||||
window.isTestNodeChange = function(e)
|
||||
{
|
||||
const checked = $('#isTestNode').prop('checked');
|
||||
var currentParam = params.replace('{osName}', osName).replace('{hostType}', hostType).replace('{isTestNode}', checked ? 1 : 0);
|
||||
loadPage($.createLink('host', 'create', currentParam), '#testContainer');
|
||||
}
|
||||
@@ -1,4 +1,19 @@
|
||||
var params = 'id=' + host.id + '&osName={osName}&hostType={hostType}&isTestNode={isTestNode}';
|
||||
window.osChange = function(e)
|
||||
{
|
||||
loadPage($.createLink('host', 'edit', 'id=' + host.id + '&osName=' + e.target.value), '#osVersion');
|
||||
}
|
||||
var currentParam = params.replace('{osName}', e.target.value).replace('{hostType}', hostType).replace('{isTestNode}', isTestNode);
|
||||
loadPage($.createLink('host', 'edit', currentParam), '#osVersion');
|
||||
}
|
||||
window.hostTypeChange = function(e)
|
||||
{
|
||||
var currentParam = params.replace('{osName}', osName).replace('{hostType}', e.target.value).replace('{isTestNode}', isTestNode);
|
||||
loadPage($.createLink('host', 'edit', currentParam), '#testType');
|
||||
}
|
||||
|
||||
window.isTestNodeChange = function(e)
|
||||
{
|
||||
const checked = $('#isTestNode_1').prop('checked');
|
||||
console.log(111, checked)
|
||||
var currentParam = params.replace('{osName}', osName).replace('{hostType}', hostType).replace('{isTestNode}', checked ? 1 : 0);
|
||||
loadPage($.createLink('host', 'edit', currentParam), '#testContainer');
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ $lang->host->treemap = 'Host Topology';
|
||||
$lang->host->changeStatus = 'Online/Offline';
|
||||
$lang->host->byQuery = 'Search';
|
||||
$lang->host->reason = 'Reason';
|
||||
$lang->host->testType = 'Type';
|
||||
|
||||
$lang->host->name = 'Name';
|
||||
$lang->host->type = 'Type';
|
||||
@@ -28,12 +29,14 @@ $lang->host->cpuCores = 'CPU Cores';
|
||||
$lang->host->cpuRate = 'CPU Rate';
|
||||
$lang->host->memory = 'Memory Size';
|
||||
$lang->host->serverRoom = 'IDC';
|
||||
$lang->host->isTestNode = 'Used as test node';
|
||||
|
||||
$lang->host->createdBy = 'CreatedBy';
|
||||
$lang->host->createdDate = 'CreatedDate';
|
||||
$lang->host->editedBy = 'EditedBy';
|
||||
$lang->host->editedDate = 'EditedDate';
|
||||
$lang->host->all = 'All Hosts';
|
||||
$lang->host->createdBy = 'CreatedBy';
|
||||
$lang->host->createdDate = 'CreatedDate';
|
||||
$lang->host->editedBy = 'EditedBy';
|
||||
$lang->host->editedDate = 'EditedDate';
|
||||
$lang->host->registerDate = 'RegisterDate';
|
||||
$lang->host->all = 'All Hosts';
|
||||
|
||||
$lang->host->empty = 'No Host';
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ $lang->host->treemap = 'Host Topology';
|
||||
$lang->host->changeStatus = 'Online/Offline';
|
||||
$lang->host->byQuery = 'Search';
|
||||
$lang->host->reason = 'Reason';
|
||||
$lang->host->testType = 'Type';
|
||||
|
||||
$lang->host->name = 'Name';
|
||||
$lang->host->type = 'Type';
|
||||
@@ -28,12 +29,14 @@ $lang->host->cpuCores = 'CPU Cores';
|
||||
$lang->host->cpuRate = 'CPU Rate';
|
||||
$lang->host->memory = 'Memory Size';
|
||||
$lang->host->serverRoom = 'IDC';
|
||||
$lang->host->isTestNode = 'Used as test node';
|
||||
|
||||
$lang->host->createdBy = 'CreatedBy';
|
||||
$lang->host->createdDate = 'CreatedDate';
|
||||
$lang->host->editedBy = 'EditedBy';
|
||||
$lang->host->editedDate = 'EditedDate';
|
||||
$lang->host->all = 'All Hosts';
|
||||
$lang->host->createdBy = 'CreatedBy';
|
||||
$lang->host->createdDate = 'CreatedDate';
|
||||
$lang->host->editedBy = 'EditedBy';
|
||||
$lang->host->editedDate = 'EditedDate';
|
||||
$lang->host->registerDate = 'RegisterDate';
|
||||
$lang->host->all = 'All Hosts';
|
||||
|
||||
$lang->host->empty = 'No Host';
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ $lang->host->treemap = 'Topologie Serveur';
|
||||
$lang->host->changeStatus = 'Online/Offline';
|
||||
$lang->host->byQuery = 'Recherche';
|
||||
$lang->host->reason = 'Raison';
|
||||
$lang->host->testType = 'Type';
|
||||
|
||||
$lang->host->name = 'Nom';
|
||||
$lang->host->type = 'Type';
|
||||
@@ -28,12 +29,14 @@ $lang->host->cpuCores = 'CPU Cores';
|
||||
$lang->host->cpuRate = 'CPU Freq.';
|
||||
$lang->host->memory = 'Capacité Mémoire';
|
||||
$lang->host->serverRoom = 'IDC';
|
||||
$lang->host->isTestNode = 'Used as test node';
|
||||
|
||||
$lang->host->createdBy = 'Créé par';
|
||||
$lang->host->createdDate = 'Créé le';
|
||||
$lang->host->editedBy = 'Edité par';
|
||||
$lang->host->editedDate = 'Edité le';
|
||||
$lang->host->all = 'Tous Serveurs';
|
||||
$lang->host->createdBy = 'Créé par';
|
||||
$lang->host->createdDate = 'Créé le';
|
||||
$lang->host->editedBy = 'Edité par';
|
||||
$lang->host->editedDate = 'Edité le';
|
||||
$lang->host->registerDate = 'RegisterDate';
|
||||
$lang->host->all = 'Tous Serveurs';
|
||||
|
||||
$lang->host->empty = 'No Host';
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ $lang->host->treemap = 'Cấu trúc Host';
|
||||
$lang->host->changeStatus = 'Online/Offline';
|
||||
$lang->host->byQuery = 'Tìm kiếm';
|
||||
$lang->host->reason = 'Lý do';
|
||||
$lang->host->testType = 'Type';
|
||||
|
||||
$lang->host->name = 'Tên';
|
||||
$lang->host->type = 'Loại';
|
||||
@@ -28,12 +29,14 @@ $lang->host->cpuCores = 'CPU Cores';
|
||||
$lang->host->cpuRate = 'CPU Rate';
|
||||
$lang->host->memory = 'Memory Size';
|
||||
$lang->host->serverRoom = 'IDC';
|
||||
$lang->host->isTestNode = 'Used as test node';
|
||||
|
||||
$lang->host->createdBy = 'Người tạo';
|
||||
$lang->host->createdDate = 'Ngày tạo';
|
||||
$lang->host->editedBy = 'Người sửa';
|
||||
$lang->host->editedDate = 'Ngày sửa';
|
||||
$lang->host->all = 'Tất cả Hosts';
|
||||
$lang->host->createdBy = 'Người tạo';
|
||||
$lang->host->createdDate = 'Ngày tạo';
|
||||
$lang->host->editedBy = 'Người sửa';
|
||||
$lang->host->editedDate = 'Ngày sửa';
|
||||
$lang->host->registerDate = 'RegisterDate';
|
||||
$lang->host->all = 'Tất cả Hosts';
|
||||
|
||||
$lang->host->groupMaintenance = 'Quản lý Group';
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ $lang->host->treemap = '主机拓扑图';
|
||||
$lang->host->changeStatus = '上架/下架';
|
||||
$lang->host->byQuery = '搜索';
|
||||
$lang->host->reason = '原因';
|
||||
$lang->host->testType = '方式';
|
||||
|
||||
$lang->host->name = '名称';
|
||||
$lang->host->type = '类型';
|
||||
@@ -28,12 +29,14 @@ $lang->host->cpuCores = '单CPU核心数';
|
||||
$lang->host->cpuRate = 'CPU频率';
|
||||
$lang->host->memory = '内存大小';
|
||||
$lang->host->serverRoom = '机房';
|
||||
$lang->host->isTestNode = '用于自动化测试';
|
||||
|
||||
$lang->host->createdBy = '由谁创建';
|
||||
$lang->host->createdDate = '创建时间';
|
||||
$lang->host->editedBy = '由谁编辑';
|
||||
$lang->host->editedDate = '编辑时间';
|
||||
$lang->host->all = '全部主机';
|
||||
$lang->host->createdBy = '由谁创建';
|
||||
$lang->host->createdDate = '创建时间';
|
||||
$lang->host->editedBy = '由谁编辑';
|
||||
$lang->host->editedDate = '编辑时间';
|
||||
$lang->host->registerDate = '最后注册时间';
|
||||
$lang->host->all = '全部主机';
|
||||
|
||||
$lang->host->empty = '暂时没有主机';
|
||||
|
||||
@@ -44,6 +47,9 @@ $lang->host->statusList['online'] = '已上架';
|
||||
$lang->host->statusList['busy'] = '已超载';
|
||||
$lang->host->statusList['offline'] = '已下架';
|
||||
|
||||
$lang->host->testTypes['node'] = '使用主机执行测试';
|
||||
$lang->host->testTypes['kvm'] = '使用主机生成的虚拟机执行测试';
|
||||
|
||||
$lang->host->online = '上架';
|
||||
$lang->host->busy = '超载';
|
||||
$lang->host->offline = '下架';
|
||||
|
||||
@@ -9,6 +9,7 @@ $lang->host->treemap = '拓撲圖';
|
||||
$lang->host->changeStatus = '上架/下架';
|
||||
$lang->host->byQuery = '搜索';
|
||||
$lang->host->reason = '原因';
|
||||
$lang->host->testType = '方式';
|
||||
|
||||
$lang->host->name = '名稱';
|
||||
$lang->host->type = '類型';
|
||||
@@ -24,12 +25,14 @@ $lang->host->cpuCores = '單CPU核心數';
|
||||
$lang->host->cpuRate = 'CPU頻率';
|
||||
$lang->host->memory = '內存大小';
|
||||
$lang->host->serverRoom = '機房';
|
||||
$lang->host->isTestNode = '用於自動化測試';
|
||||
|
||||
$lang->host->createdBy = '由誰創建';
|
||||
$lang->host->createdDate = '創建時間';
|
||||
$lang->host->editedBy = '由誰編輯';
|
||||
$lang->host->editedDate = '編輯時間';
|
||||
$lang->host->all = '所有主機';
|
||||
$lang->host->createdBy = '由誰創建';
|
||||
$lang->host->createdDate = '創建時間';
|
||||
$lang->host->editedBy = '由誰編輯';
|
||||
$lang->host->editedDate = '編輯時間';
|
||||
$lang->host->registerDate = '最後注冊時間';
|
||||
$lang->host->all = '所有主機';
|
||||
|
||||
$lang->host->groupMaintenance = '分組維護';
|
||||
|
||||
|
||||
+85
-11
@@ -24,6 +24,22 @@ class hostModel extends model
|
||||
->where('id')->eq($id)
|
||||
->fetch();
|
||||
|
||||
if($host->testType === 'kvm')
|
||||
{
|
||||
$host->heartbeat = empty($host->heartbeat) ? '' : $host->heartbeat;
|
||||
|
||||
if(time() - strtotime($host->heartbeat) > 60 && $host->status == 'online')
|
||||
{
|
||||
$host->status = 'offline';
|
||||
}
|
||||
}
|
||||
elseif($host->testType === 'node')
|
||||
{
|
||||
if(time() - strtotime($host->heartbeat) > 60)
|
||||
{
|
||||
$host->status = 'offline';
|
||||
}
|
||||
}
|
||||
return $host;
|
||||
}
|
||||
|
||||
@@ -84,15 +100,35 @@ class hostModel extends model
|
||||
}
|
||||
|
||||
$orderBy = str_replace($orderBy, 't1.', '');
|
||||
$host = $this->dao->select('*,id as hostID')->from(TABLE_HOST)
|
||||
$hostList = $this->dao->select('*,id as hostID')->from(TABLE_HOST)
|
||||
->where('deleted')->eq('0')
|
||||
->andWhere('type')->eq('normal')
|
||||
->andWhere('type')->in('normal,zahost')
|
||||
->beginIF($modules)->andWhere('`group`')->in($modules)->fi()
|
||||
->beginIF($query)->andWhere($query)->fi()
|
||||
->orderBy($orderBy)
|
||||
->page($pager)
|
||||
->fetchAll();
|
||||
return $host;
|
||||
|
||||
foreach($hostList as $host)
|
||||
{
|
||||
|
||||
$host->heartbeat = empty($host->heartbeat) ? '' : $host->heartbeat;
|
||||
if($host->testType === 'kvm')
|
||||
{
|
||||
if(time() - strtotime($host->heartbeat) > 60 && $host->status == 'online')
|
||||
{
|
||||
$host->status = 'offline';
|
||||
}
|
||||
}
|
||||
elseif($host->testType === 'node')
|
||||
{
|
||||
if(time() - strtotime($host->heartbeat) > 60)
|
||||
{
|
||||
$host->status = 'offline';
|
||||
}
|
||||
}
|
||||
}
|
||||
return $hostList;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -110,7 +146,7 @@ class hostModel extends model
|
||||
return $this->dao->select('id,name')->from(TABLE_HOST)
|
||||
->where('deleted')->eq('0')
|
||||
->andWhere('`id`')->in($hostIdList)
|
||||
->andWhere('type')->eq('normal')
|
||||
->andWhere('type')->in('normal,zahost')
|
||||
->orderBy('`group`')
|
||||
->fetchPairs('id', 'name');
|
||||
}
|
||||
@@ -138,7 +174,7 @@ class hostModel extends model
|
||||
|
||||
return $this->dao->select("id,name")->from(TABLE_HOST)
|
||||
->where('deleted')->eq('0')
|
||||
->andWhere('type')->eq('normal')
|
||||
->andWhere('type')->in('normal,zahost')
|
||||
->beginIF($modules)->andWhere('`group`')->in($modules)->fi()
|
||||
->orderBy('`group`')
|
||||
->fetchPairs('id', 'name');
|
||||
@@ -155,13 +191,33 @@ class hostModel extends model
|
||||
$hostInfo = fixer::input('post')
|
||||
->setDefault('hardwareType', 'server')
|
||||
->setDefault('cpuNumber,cpuCores,diskSize,memory', 0)
|
||||
->trim('extranet')
|
||||
->get();
|
||||
|
||||
if(isset($hostInfo->isTestNode))
|
||||
{
|
||||
$hostInfo->product = empty($hostInfo->product) ? '' : ',' . implode(',', $hostInfo->product) . ',';
|
||||
if($hostInfo->testType === 'kvm')
|
||||
{
|
||||
$hostInfo->status = 'wait';
|
||||
$hostInfo->zap = $this->config->zahost->defaultPort;
|
||||
$hostInfo->secret = md5($hostInfo->name . time());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$hostInfo->product = '';
|
||||
$hostInfo->testType = '';
|
||||
}
|
||||
|
||||
unset($hostInfo->isTestNode);
|
||||
|
||||
$hostInfo->admin = intval($hostInfo->admin);
|
||||
$hostInfo->serverRoom = intval($hostInfo->serverRoom);
|
||||
$this->dao->update(TABLE_HOST)->data($hostInfo)
|
||||
->batchCheck($this->config->host->create->requiredFields, 'notempty')
|
||||
->batchCheck('diskSize,memory', 'float');
|
||||
->batchCheck('diskSize,memory', 'float')
|
||||
->check('name', 'unique', "type='normal'");
|
||||
if(dao::isError()) return false;
|
||||
|
||||
$intFields = explode(',', $this->config->host->create->intFields);
|
||||
@@ -192,7 +248,7 @@ class hostModel extends model
|
||||
{
|
||||
$hostID = $this->dao->lastInsertID();
|
||||
$this->loadModel('action')->create('host', $hostID, 'created');
|
||||
return true;
|
||||
return $hostID;
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -214,12 +270,29 @@ class hostModel extends model
|
||||
->setDefault('cpuNumber,cpuCores,diskSize,memory', 0)
|
||||
->get();
|
||||
|
||||
if(isset($hostInfo->isTestNode))
|
||||
{
|
||||
$hostInfo->product = empty($hostInfo->product) ? '' : ',' . implode(',', $hostInfo->product) . ',';
|
||||
if($hostInfo->testType === 'kvm')
|
||||
{
|
||||
$hostInfo->status = 'wait';
|
||||
$hostInfo->zap = $this->config->zahost->defaultPort;
|
||||
$hostInfo->secret = md5($hostInfo->name . time());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$hostInfo->product = '';
|
||||
$hostInfo->testType = '';
|
||||
}
|
||||
unset($hostInfo->isTestNode);
|
||||
$hostInfo->admin = intval($hostInfo->admin);
|
||||
$hostInfo->serverRoom = intval($hostInfo->serverRoom);
|
||||
|
||||
$this->dao->update(TABLE_HOST)->data($hostInfo)
|
||||
->batchCheck($this->config->host->create->requiredFields, 'notempty')
|
||||
->batchCheck('diskSize,memory', 'float');
|
||||
->batchCheck('diskSize,memory', 'float')
|
||||
->check('name', 'unique', "id != $id and type='normal'");
|
||||
if(dao::isError()) return false;
|
||||
|
||||
$intFields = explode(',', $this->config->host->create->intFields);
|
||||
@@ -241,7 +314,7 @@ class hostModel extends model
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$hostInfo->type = 'normal';
|
||||
$hostInfo->editedBy = $this->app->user->account;
|
||||
$hostInfo->editedDate = helper::now();
|
||||
$this->dao->update(TABLE_HOST)->data($hostInfo)->autoCheck()->where('id')->eq($id)->exec();
|
||||
@@ -274,7 +347,7 @@ class hostModel extends model
|
||||
$stmt = $this->dao->select('t1.id,t1.name,t3.id as roomID,t3.city,t3.name as roomName,t1.extranet')->from(TABLE_HOST)->alias('t1')
|
||||
->leftJoin(TABLE_SERVERROOM)->alias('t3')->on('t1.serverRoom=t3.id')
|
||||
->where('t1.deleted')->eq(0)
|
||||
->andWhere('t1.type')->eq('normal')
|
||||
->andWhere('t1.type')->in('normal,zahost')
|
||||
->andWhere('t3.deleted')->eq(0)
|
||||
->andWhere('t1.serverRoom')->ne(0)
|
||||
->orderBy('t3.city,t3.id,t1.id')
|
||||
@@ -334,7 +407,7 @@ class hostModel extends model
|
||||
$this->app->loadLang('serverroom');
|
||||
$hostGroups = $this->dao->select('id,name,`group`,extranet')->from(TABLE_HOST)
|
||||
->where('deleted')->eq(0)
|
||||
->andWhere('type')->eq('normal')
|
||||
->andWhere('type')->in('normal,zahost')
|
||||
->fetchGroup('group', 'id');
|
||||
|
||||
/* Get module list by host group. */
|
||||
@@ -403,6 +476,7 @@ class hostModel extends model
|
||||
{
|
||||
if(!$host->id) return false;
|
||||
if (in_array($action, array('online', 'offline')) && !common::hasPriv('host', 'changeStatus')) return false;
|
||||
if (in_array($action, array('online', 'offline')) && $host->testType !== '') return false;
|
||||
|
||||
if($host->status == 'online' && $action == 'online') return false;
|
||||
if($host->status == 'offline' && $action == 'offline') return false;
|
||||
|
||||
@@ -12,8 +12,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace zin;
|
||||
|
||||
jsVar('orderBy', $orderBy);
|
||||
jsVar('hostLang', $lang->host);
|
||||
jsVar('orderBy', $orderBy);
|
||||
jsVar('hostLang', $lang->host);
|
||||
jsVar('zahostLang', $lang->zahost);
|
||||
jsVar('sortLink', helper::createLink('host', 'browse', "browseType=$browseType¶m=$param&orderBy={orderBy}&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}"));
|
||||
|
||||
$config->host->featureBar[0]['active'] = true;
|
||||
|
||||
@@ -12,6 +12,10 @@ declare(strict_types=1);
|
||||
|
||||
namespace zin;
|
||||
|
||||
jsVar('osName', $osName);
|
||||
jsVar('hostType', $hostType);
|
||||
jsVar('isTestNode', $isTestNode);
|
||||
|
||||
formPanel
|
||||
(
|
||||
set::id('hostCreateForm'),
|
||||
@@ -126,7 +130,8 @@ formPanel
|
||||
set::control('picker'),
|
||||
set::name('hostType'),
|
||||
set::items($lang->host->hostTypeList),
|
||||
set::value('virtual')
|
||||
set::value($hostType),
|
||||
on::change('hostTypeChange'),
|
||||
)
|
||||
),
|
||||
formRow
|
||||
@@ -146,6 +151,7 @@ formPanel
|
||||
set::width('1/3'),
|
||||
set::label($lang->host->osVersion),
|
||||
set::control('picker'),
|
||||
set::required(true),
|
||||
set::name('osVersion'),
|
||||
set::items($lang->host->{"{$osName}List"}),
|
||||
)
|
||||
@@ -155,9 +161,10 @@ formPanel
|
||||
formGroup
|
||||
(
|
||||
set::width('1/3'),
|
||||
set::name('zap'),
|
||||
set::label($lang->host->zap),
|
||||
set::value(8086),
|
||||
set::label($lang->host->provider),
|
||||
set::control('picker'),
|
||||
set::name('provider'),
|
||||
set::items($lang->host->providerList),
|
||||
),
|
||||
formGroup
|
||||
(
|
||||
@@ -189,10 +196,10 @@ formPanel
|
||||
formGroup
|
||||
(
|
||||
set::width('1/3'),
|
||||
set::label($lang->host->provider),
|
||||
set::control('picker'),
|
||||
set::name('provider'),
|
||||
set::items($lang->host->providerList),
|
||||
set::label($lang->host->isTestNode),
|
||||
set::control('checkbox'),
|
||||
set::name('isTestNode'),
|
||||
on::change('isTestNodeChange'),
|
||||
),
|
||||
formGroup
|
||||
(
|
||||
@@ -205,4 +212,27 @@ formPanel
|
||||
set::items($lang->host->statusList),
|
||||
)
|
||||
),
|
||||
formRow
|
||||
(
|
||||
setID('testContainer'),
|
||||
formGroup
|
||||
(
|
||||
set::width('1/3'),
|
||||
setClass($isTestNode ? '' : 'hidden'),
|
||||
set::name("product[]"),
|
||||
set::label($lang->story->product),
|
||||
set::control(array("type" => "picker","multiple" => true)),
|
||||
set::items($products),
|
||||
),
|
||||
formGroup
|
||||
(
|
||||
set::width('1/3'),
|
||||
setClass($isTestNode ? '' : 'hidden'),
|
||||
set::name("testType"),
|
||||
set::required(true),
|
||||
set::label($lang->host->testType),
|
||||
set::control('picker'),
|
||||
set::items($testTypes),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
@@ -13,6 +13,9 @@ declare(strict_types=1);
|
||||
namespace zin;
|
||||
|
||||
jsVar('host', $host);
|
||||
jsVar('osName', $osName);
|
||||
jsVar('hostType', $hostType);
|
||||
jsVar('isTestNode', $isTestNode);
|
||||
|
||||
formPanel
|
||||
(
|
||||
@@ -169,9 +172,11 @@ formPanel
|
||||
formGroup
|
||||
(
|
||||
set::width('400px'),
|
||||
set::name('zap'),
|
||||
set::label($lang->host->zap),
|
||||
set::value($host->zap ? $host->zap : 8086),
|
||||
set::label($lang->host->provider),
|
||||
set::control('picker'),
|
||||
set::name('provider'),
|
||||
set::items($lang->host->providerList),
|
||||
set::value($host->provider)
|
||||
),
|
||||
formGroup
|
||||
(
|
||||
@@ -189,6 +194,7 @@ formPanel
|
||||
(
|
||||
set::width('400px'),
|
||||
set::name('intranet'),
|
||||
set::readonly($host->testType === 'kvm'),
|
||||
set::label($lang->host->intranet),
|
||||
set::value($host->intranet),
|
||||
),
|
||||
@@ -196,6 +202,7 @@ formPanel
|
||||
(
|
||||
set::width('400px'),
|
||||
set::name('extranet'),
|
||||
set::readonly($host->testType === 'kvm'),
|
||||
set::label($lang->host->extranet),
|
||||
set::value($host->extranet),
|
||||
)
|
||||
@@ -204,22 +211,50 @@ formPanel
|
||||
(
|
||||
formGroup
|
||||
(
|
||||
set::width('400px'),
|
||||
set::label($lang->host->provider),
|
||||
set::control('picker'),
|
||||
set::name('provider'),
|
||||
set::items($lang->host->providerList),
|
||||
set::value($host->provider)
|
||||
set::width('1/3'),
|
||||
set::label($lang->host->isTestNode),
|
||||
set::control('checkbox'),
|
||||
set::name('isTestNode'),
|
||||
set::disabled($host->testType == 'kvm'),
|
||||
on::change('isTestNodeChange'),
|
||||
set::value($host->testType ? '1' : ''),
|
||||
set::items(array('1' => ''))
|
||||
),
|
||||
formGroup
|
||||
$host->testType == 'kvm' ? null : formGroup
|
||||
(
|
||||
set::width('400px'),
|
||||
set::width('1/3'),
|
||||
set::name('status'),
|
||||
set::control('radioList'),
|
||||
set::label($lang->host->status),
|
||||
set::value($host->status ? $host->status : 'online'),
|
||||
set::value('online'),
|
||||
set::inline(true),
|
||||
set::items($lang->host->statusList),
|
||||
)
|
||||
),
|
||||
formRow
|
||||
(
|
||||
setID('testContainer'),
|
||||
formGroup
|
||||
(
|
||||
set::width('1/3'),
|
||||
setClass($isTestNode ? '' : 'hidden'),
|
||||
set::name("product[]"),
|
||||
set::label($lang->story->product),
|
||||
set::control(array("type" => "picker","multiple" => true)),
|
||||
set::items($products),
|
||||
set::value(trim($host->product, ',')),
|
||||
),
|
||||
formGroup
|
||||
(
|
||||
set::width('1/3'),
|
||||
setClass($isTestNode ? '' : 'hidden'),
|
||||
set::name("testType"),
|
||||
set::required(true),
|
||||
set::label($lang->host->testType),
|
||||
set::control('picker'),
|
||||
set::items($testTypes),
|
||||
set::disabled($host->testType == 'kvm'),
|
||||
set::value($host->testType),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
@@ -440,15 +440,17 @@ class zahostModel extends model
|
||||
/**
|
||||
* Get pairs.
|
||||
*
|
||||
* @param string $idFrom
|
||||
* @param int $productID
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getPairs()
|
||||
public function getPairs($productID)
|
||||
{
|
||||
return $this->dao->select("id,name")->from(TABLE_ZAHOST)
|
||||
->where('deleted')->eq('0')
|
||||
->andWhere('type')->eq('zahost')
|
||||
->andWhere('type')->eq('normal')
|
||||
->andWhere('testType')->eq('kvm')
|
||||
->beginIF(!empty($productID))->andWhere('product')->like("%,$productID,%")->fi()
|
||||
->orderBy('`group`')
|
||||
->fetchPairs('id', 'name');
|
||||
}
|
||||
|
||||
@@ -104,7 +104,7 @@ class zanode extends control
|
||||
}
|
||||
|
||||
$this->view->title = $this->lang->zanode->create;
|
||||
$this->view->hostPairs = array('' => '') + $this->loadModel('zahost')->getPairs('host');
|
||||
$this->view->hostPairs = array('' => '') + $this->loadModel('zahost')->getPairs($this->session->product);
|
||||
$this->view->hostID = $hostID;
|
||||
|
||||
return $this->display();
|
||||
|
||||
Reference in New Issue
Block a user