502 lines
13 KiB
PHP
502 lines
13 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
/**
|
|
* The view view file of zanode module of ZenTaoPMS.
|
|
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
|
|
* @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
|
* @author Zeng Gang<zenggang@easycorp.ltd>
|
|
* @package zanode
|
|
* @link https://www.zentao.net
|
|
*/
|
|
namespace zin;
|
|
|
|
jsVar('nodeID', $zanode->id);
|
|
jsVar('zanodeLang', $lang->zanode);
|
|
jsVar('nodeStatus', $zanode->status);
|
|
jsVar('hostType', $zanode->hostType);
|
|
jsVar('webRoot', getWebRoot());
|
|
|
|
$account = strpos(strtolower($zanode->osName), "windows") !== false ? $config->zanode->defaultWinAccount : $config->zanode->defaultAccount;
|
|
$ssh = $zanode->hostType == 'physics' ? ('ssh ' . $zanode->extranet) : ($zanode->ssh ? 'ssh ' . $account . '@' . $zanode->ip . ' -p ' . $zanode->ssh : '');
|
|
|
|
$snapshotUrl = helper::createLink('zanode', 'browseSnapshot', "nodeID={$zanode->id}");
|
|
|
|
$mainActions = array();
|
|
$commonActions = array();
|
|
foreach($config->zanode->view->operateList as $operate)
|
|
{
|
|
if(strpos($operate, '|') !== false)
|
|
{
|
|
$operates = explode('|', $operate);
|
|
foreach($operates as $operate)
|
|
{
|
|
if($this->zanode->isClickable($zanode, $operate)) break;
|
|
}
|
|
}
|
|
|
|
if(!common::hasPriv('zanode', $operate)) continue;
|
|
$action = $config->zanode->dtable->fieldList['actions']['list'][$operate];
|
|
if(!$this->zanode->isClickable($zanode, $operate))
|
|
{
|
|
unset($action);
|
|
continue;
|
|
}
|
|
|
|
if($operate === 'edit' || $operate === 'destroy')
|
|
{
|
|
$commonActions[] = $action;
|
|
continue;
|
|
}
|
|
$mainActions[] = $action;
|
|
}
|
|
|
|
$baseInfo = array();
|
|
if($zanode->hostType == 'physics')
|
|
{
|
|
$baseInfo[] = div
|
|
(
|
|
setClass('w-1/3'),
|
|
span
|
|
(
|
|
setClass('text-gray'),
|
|
$lang->zanode->osName
|
|
),
|
|
span
|
|
(
|
|
setClass('ml-2'),
|
|
zget($config->zanode->linuxList, $zanode->osName, zget($config->zanode->windowsList, $zanode->osName))
|
|
)
|
|
);
|
|
$baseInfo[] = div
|
|
(
|
|
setClass('w-1/2'),
|
|
span
|
|
(
|
|
setClass('text-gray'),
|
|
$lang->zanode->sshAddress
|
|
),
|
|
span
|
|
(
|
|
setClass('ml-2'),
|
|
$ssh,
|
|
$ssh ? h::button
|
|
(
|
|
setClass('ghost btn btn-info size-sm btn-ssh-copy'),
|
|
icon
|
|
(
|
|
setClass('icon-common-copy icon-copy'),
|
|
set::title($lang->zanode->copy),
|
|
set::name('')
|
|
),
|
|
on::click('sshCopy')
|
|
) : null,
|
|
h::input
|
|
(
|
|
set::type('hidden'),
|
|
setID('ssh-copy'),
|
|
set::value($ssh)
|
|
)
|
|
)
|
|
);
|
|
$hiddenHost || $zanode->cpuCores == 0 ? null : $baseInfo[] = div
|
|
(
|
|
setClass('w-1/6'),
|
|
span
|
|
(
|
|
setClass('text-gray'),
|
|
$lang->zanode->cpuCores
|
|
),
|
|
span
|
|
(
|
|
setClass('ml-2'),
|
|
$zanode->cpuCores . ' ' . $lang->zanode->cpuUnit
|
|
)
|
|
);
|
|
$baseInfo[] = div
|
|
(
|
|
$hiddenHost || $zanode->cpuCores == 0 ? setClass('w-1/6') : setClass('w-1/3 mt-2'),
|
|
span
|
|
(
|
|
setClass('text-gray'),
|
|
$lang->zanode->status
|
|
),
|
|
span
|
|
(
|
|
setClass('ml-2'),
|
|
zget($lang->zanode->statusList, $zanode->status)
|
|
)
|
|
);
|
|
$hiddenHost || $zanode->memory == 0 ? null : $baseInfo[] = div
|
|
(
|
|
setClass('w-1/2 mt-4'),
|
|
span
|
|
(
|
|
setClass('text-gray'),
|
|
$lang->zanode->memory
|
|
),
|
|
span
|
|
(
|
|
setClass('ml-2'),
|
|
$zanode->memory . 'GB'
|
|
)
|
|
);
|
|
$hiddenHost || $zanode->diskSize == 0 ? null : $baseInfo[] = div
|
|
(
|
|
setClass('w-1/6 mt-4'),
|
|
span
|
|
(
|
|
setClass('text-gray'),
|
|
$lang->zanode->diskSize
|
|
),
|
|
span
|
|
(
|
|
setClass('ml-2'),
|
|
$zanode->diskSize . 'GB'
|
|
)
|
|
);
|
|
}
|
|
else
|
|
{
|
|
$baseInfo[] = div
|
|
(
|
|
setClass('w-1/3'),
|
|
span
|
|
(
|
|
setClass('text-gray'),
|
|
$lang->zanode->osName
|
|
),
|
|
span
|
|
(
|
|
setClass('ml-2'),
|
|
$zanode->osName
|
|
)
|
|
);
|
|
$baseInfo[] = div
|
|
(
|
|
setClass('w-1/2'),
|
|
span
|
|
(
|
|
setClass('text-gray'),
|
|
$lang->zanode->sshCommand
|
|
),
|
|
span
|
|
(
|
|
setClass('ml-2'),
|
|
$ssh,
|
|
$ssh ? h::button
|
|
(
|
|
setClass('ghost btn btn-info size-sm btn-ssh-copy'),
|
|
icon
|
|
(
|
|
setClass('icon-common-copy icon-copy'),
|
|
set::title($lang->zanode->copy),
|
|
set::name('')
|
|
),
|
|
on::click('sshCopy')
|
|
) : null,
|
|
h::textarea
|
|
(
|
|
setClass('hidden'),
|
|
setID('ssh-copy'),
|
|
$ssh
|
|
)
|
|
)
|
|
);
|
|
$baseInfo[] = div
|
|
(
|
|
setClass('w-1/6'),
|
|
span
|
|
(
|
|
setClass('text-gray'),
|
|
$lang->zanode->cpuCores
|
|
),
|
|
span
|
|
(
|
|
setClass('ml-2'),
|
|
$zanode->cpuCores . '' . $lang->zanode->cpuUnit
|
|
)
|
|
);
|
|
$baseInfo[] = div
|
|
(
|
|
setClass('w-1/3 mt-4'),
|
|
span
|
|
(
|
|
setClass('text-gray'),
|
|
$lang->zanode->status
|
|
),
|
|
span
|
|
(
|
|
setClass('ml-2'),
|
|
zget($lang->zanode->statusList, $zanode->status)
|
|
)
|
|
);
|
|
$baseInfo[] = div
|
|
(
|
|
setClass('w-1/2 mt-4'),
|
|
span
|
|
(
|
|
setClass('text-gray'),
|
|
$lang->zanode->defaultUser
|
|
),
|
|
span
|
|
(
|
|
setClass('ml-2'),
|
|
$account
|
|
)
|
|
);
|
|
$baseInfo[] = div
|
|
(
|
|
setClass('w-1/6 mt-4'),
|
|
span
|
|
(
|
|
setClass('text-gray'),
|
|
$lang->zanode->memory
|
|
),
|
|
span
|
|
(
|
|
setClass('ml-2'),
|
|
$zanode->memory . ' GB'
|
|
)
|
|
);
|
|
$baseInfo[] = div
|
|
(
|
|
setClass('w-1/3 mt-4'),
|
|
span
|
|
(
|
|
setClass('text-gray'),
|
|
$lang->zanode->hostName
|
|
),
|
|
span
|
|
(
|
|
setClass('ml-2 clip w-36 inline-flex'),
|
|
set::title($zanode->hostName),
|
|
$zanode->hostName
|
|
)
|
|
);
|
|
$baseInfo[] = div
|
|
(
|
|
setClass('w-1/2 mt-4'),
|
|
span
|
|
(
|
|
setClass('text-gray'),
|
|
$lang->zanode->defaultPwd
|
|
),
|
|
span
|
|
(
|
|
setClass('ml-2'),
|
|
span
|
|
(
|
|
setID('pwd-text'),
|
|
str_repeat('*', strlen($config->zanode->defaultPwd))
|
|
),
|
|
h::button
|
|
(
|
|
setClass('ghost btn btn-info size-sm btn-pwd-copy'),
|
|
icon
|
|
(
|
|
setClass('icon-common-copy icon-copy'),
|
|
set::title($lang->zanode->copy),
|
|
set::name('')
|
|
),
|
|
on::click('pwdCopy')
|
|
),
|
|
h::button
|
|
(
|
|
setClass('ghost btn btn-info size-sm btn-pwd-show'),
|
|
icon
|
|
(
|
|
setClass('icon-common-eye icon-eye'),
|
|
set::title($lang->zanode->showPwd),
|
|
set::name('')
|
|
),
|
|
on::click('pwdShow')
|
|
),
|
|
h::input
|
|
(
|
|
setID('pwd-copy'),
|
|
set::type('hidden'),
|
|
set::value($config->zanode->defaultPwd)
|
|
)
|
|
)
|
|
);
|
|
}
|
|
|
|
detailHeader
|
|
(
|
|
to::title
|
|
(
|
|
entityLabel
|
|
(
|
|
set::entityID($zanode->id),
|
|
set::level(1),
|
|
set::text($zanode->name)
|
|
),
|
|
$zanode->deleted ? span(setClass('label danger'), $lang->zanode->deleted) : null
|
|
)
|
|
);
|
|
|
|
detailBody
|
|
(
|
|
sectionList
|
|
(
|
|
setID('baseInfoContent'),
|
|
section
|
|
(
|
|
set::title($lang->zanode->baseInfo),
|
|
h::table
|
|
(
|
|
setClass('w-full'),
|
|
h::tr
|
|
(
|
|
h::td
|
|
(
|
|
div
|
|
(
|
|
setClass('flex flex-wrap pt-2 mx-4'),
|
|
$baseInfo
|
|
)
|
|
)
|
|
)
|
|
)
|
|
),
|
|
section
|
|
(
|
|
set::title($lang->zanode->desc),
|
|
!empty($zanode->desc) ? html(htmlspecialchars_decode($zanode->desc)) : $lang->noData
|
|
)
|
|
),
|
|
sectionList
|
|
(
|
|
setID('serviceContent'),
|
|
div
|
|
(
|
|
setClass('text-lg font-bold'),
|
|
$lang->zanode->init->statusTitle,
|
|
button
|
|
(
|
|
setClass('ghost btn'),
|
|
icon('refresh', setClass('text-primary')),
|
|
$lang->zanode->init->checkStatus,
|
|
on::click()->call('window.checkServiceStatus')
|
|
)
|
|
),
|
|
div
|
|
(
|
|
setClass('service-status hidden'),
|
|
span
|
|
(
|
|
setClass('dot-symbol dot-zenagent text-danger'),
|
|
'●'
|
|
),
|
|
span
|
|
(
|
|
' ZAgent ',
|
|
span
|
|
(
|
|
setClass('zenagent-status'),
|
|
$lang->zanode->initializing
|
|
)
|
|
)
|
|
),
|
|
div
|
|
(
|
|
setClass('service-status hidden'),
|
|
span
|
|
(
|
|
setClass('dot-symbol dot-ztf text-danger'),
|
|
'●'
|
|
),
|
|
span
|
|
(
|
|
' ZTF ',
|
|
span
|
|
(
|
|
setClass('ztf-status'),
|
|
$lang->zanode->initializing
|
|
)
|
|
)
|
|
),
|
|
div
|
|
(
|
|
setID('statusContainer')
|
|
),
|
|
div
|
|
(
|
|
setClass('status-notice'),
|
|
span
|
|
(
|
|
setClass('init-success hidden'),
|
|
html(sprintf($lang->zanode->init->initSuccessNoticeTitle, "<a href='https://www.zentao.net/book/zentaopms/974.html?fullScreen=zentao'>{$lang->zanode->manual}</a>", html::a(createLink('testcase', 'automation'), $lang->zanode->automation, '', "data-toggle='modal'")))
|
|
),
|
|
$zanode->hostType == 'physics' ? div
|
|
(
|
|
setClass('init-fail hidden'),
|
|
html($lang->zanode->init->initFailNoticeOnPhysics),
|
|
textarea
|
|
(
|
|
setID('initBash'),
|
|
setClass('hidden'),
|
|
$initBash
|
|
),
|
|
div
|
|
(
|
|
setClass('zanode-init'),
|
|
$initBash,
|
|
h::button
|
|
(
|
|
setClass('ghost btn btn-info size-sm btn-init-copy text-primary'),
|
|
icon
|
|
(
|
|
setClass('icon-common-copy icon-copy'),
|
|
set::title($lang->zanode->copy),
|
|
set::name('')
|
|
),
|
|
on::click('onCopy')
|
|
)
|
|
)
|
|
) : null
|
|
)
|
|
),
|
|
common::hasPriv('zanode', 'browseSnapshot') && $zanode->hostType == '' ? sectionList
|
|
(
|
|
section
|
|
(
|
|
set::title($lang->zanode->browseSnapshot),
|
|
to::actions
|
|
(
|
|
div
|
|
(
|
|
setClass('ml-auto'),
|
|
btn
|
|
(
|
|
setClass('btn primary'),
|
|
$lang->zanode->createSnapshot,
|
|
set::url(createLink('zanode', 'createSnapshot', "zanodeID={$zanode->id}")),
|
|
set::icon('plus'),
|
|
setData(array('toggle' => 'modal')),
|
|
set::disabled($zanode->status != 'running' ? true : false)
|
|
)
|
|
)
|
|
)
|
|
),
|
|
!empty($snapshotList) ? div
|
|
(
|
|
setID('snapshotList'),
|
|
on::init()->do("$('#snapshotList').load('{$snapshotUrl}');"),
|
|
) : $lang->noData
|
|
) : null,
|
|
floatToolbar
|
|
(
|
|
to::prefix(backBtn(set::icon('back'), $lang->goback)),
|
|
set::main($mainActions),
|
|
set::suffix($commonActions),
|
|
set::object($zanode)
|
|
),
|
|
detailSide
|
|
(
|
|
history()
|
|
)
|
|
);
|
|
|
|
render();
|