From d851fc57830a495ee4a5c8c625fe03365d77f96b Mon Sep 17 00:00:00 2001 From: zhaoke Date: Fri, 21 Jul 2023 17:39:55 +0800 Subject: [PATCH] * Add detail view of instance module. --- module/host/control.php | 2 +- module/instance/control.php | 3 +- module/instance/css/view.ui.css | 15 +++ module/instance/lang/zh-cn.php | 18 +-- module/instance/model.php | 22 +--- module/instance/ui/view.html.php | 153 +++++++++++++++++++++++++ module/instance/view/baseinfo.html.php | 2 +- 7 files changed, 185 insertions(+), 30 deletions(-) create mode 100644 module/instance/css/view.ui.css create mode 100644 module/instance/ui/view.html.php diff --git a/module/host/control.php b/module/host/control.php index 9dfc311636..c8ee7f823a 100644 --- a/module/host/control.php +++ b/module/host/control.php @@ -163,7 +163,7 @@ class host extends control { $response['result'] = 'success'; $response['message'] = ''; - $response['load'] = true; + $response['load'] = inLink('browse'); $response['closeModal'] = true; if(helper::isAjaxRequest('modal')) return print(js::execute("loadCurrentPage();$('.modal').removeClass('show')")); diff --git a/module/instance/control.php b/module/instance/control.php index 32d3614dcf..374ba64a14 100644 --- a/module/instance/control.php +++ b/module/instance/control.php @@ -89,7 +89,8 @@ class instance extends control $this->view->instance = $instance; $this->view->cloudApp = $this->loadModel('store')->getAppInfoByChart($instance->chart, $instance->channel, false); $this->view->seniorAppList = $tab == 'baseinfo' ? $this->instance->seniorAppList($instance, $instance->channel) : array(); - $this->view->logs = $this->action->getList('instance', $id, 'date desc', $pager); + $this->view->actions = $this->loadModel('action')->getList('instance', $id); + $this->view->users = $this->loadModel('user')->getPairs('noletter'); $this->view->defaultAccount = $this->cne->getDefaultAccount($instance); $this->view->instanceMetric = $instanceMetric; $this->view->currentResource = $currentResource; diff --git a/module/instance/css/view.ui.css b/module/instance/css/view.ui.css new file mode 100644 index 0000000000..b9d1410d3f --- /dev/null +++ b/module/instance/css/view.ui.css @@ -0,0 +1,15 @@ +.detail-header .icon-info-sign {color: rgba(var(--color-secondary-500-rgb),var(--tw-bg-opacity));} +#dynamicPager {justify-content: flex-end;} +#dynamicPager .ghost {color: rgb(131, 138, 157);} +#dynamicTable a {color: inherit;} +.progress-container i {margin: auto; margin-right: 6px;} +.progress-container .progress {margin: auto; width: 200px; height: .7rem; margin-left: 6px; margin-right: 15px;} +.label-dot { + display: inline-block; + width: 8px; + height: 8px; + padding: 0; + line-height: 20px; + text-indent: -9999em; + border-radius: 50%; + } \ No newline at end of file diff --git a/module/instance/lang/zh-cn.php b/module/instance/lang/zh-cn.php index 2782d4a305..a67cac77f9 100644 --- a/module/instance/lang/zh-cn.php +++ b/module/instance/lang/zh-cn.php @@ -53,10 +53,12 @@ $lang->instance->operationLog = '操作记录'; $lang->instance->installedService = '已安装服务'; $lang->instance->runningService = '运行中的服务'; $lang->instance->installApp = '安装应用'; -$lang->instance->cpuUsage = 'CPU'; -$lang->instance->memUsage = '内存'; +$lang->instance->cpuUsage = 'CPU占用'; +$lang->instance->memUsage = '内存占用'; +$lang->instance->memTotal = '(共%dG)'; $lang->instance->currentMemory = '当前内存'; $lang->instance->adjustMem = '调整内存'; +$lang->instance->setting = '设置'; $lang->instance->saveSetting = '保存设置'; $lang->instance->leftTime = '剩余'; $lang->instance->switchTo = '升级到'; @@ -210,12 +212,12 @@ $lang->instance->statusList['abnormal'] = '异常'; $lang->instance->statusList['upgrading'] = '更新中'; $lang->instance->statusList['unknown'] = '未知'; -$lang->instance->htmlStatuses = array(); -$lang->instance->htmlStatuses['running'] = "%s"; -$lang->instance->htmlStatuses['stopped'] = "%s"; -$lang->instance->htmlStatuses['abnormal'] = "%s"; -$lang->instance->htmlStatuses['installationFail'] = $lang->instance->htmlStatuses['abnormal']; -$lang->instance->htmlStatuses['busy'] = "%s"; +$lang->instance->htmlStatusesClass = array(); +$lang->instance->htmlStatusesClass['running'] = 'info'; +$lang->instance->htmlStatusesClass['stopped'] = 'default'; +$lang->instance->htmlStatusesClass['abnormal'] = 'danger'; +$lang->instance->htmlStatusesClass['installationFail'] = 'danger'; +$lang->instance->htmlStatusesClass['busy'] = "warning"; $lang->instance->memOptions = array(); $lang->instance->memOptions[128 * 1024] = '128MB'; diff --git a/module/instance/model.php b/module/instance/model.php index 8f04fdf5f4..11677c98db 100644 --- a/module/instance/model.php +++ b/module/instance/model.php @@ -1699,21 +1699,6 @@ class InstanceModel extends model } } - /** - * Print instance status. - * - * @param object $instance - * @param bool $showText - * @access public - * @return void - */ - public function printStatus($instance, $showText = true) - { - $html = zget($this->lang->instance->htmlStatuses, $instance->status, $this->lang->instance->htmlStatuses['busy']); - $statusText = zget($this->lang->instance->statusList, $instance->status, ''); - return $showText ? printf($html, $statusText) : sprintf($html, $statusText); - } - /** * Print CPU usage. * @@ -1879,7 +1864,7 @@ class InstanceModel extends model * @param object $instance * @param object $log * @access public - * @return void + * @return string */ public function printLog($instance, $log) { @@ -1890,8 +1875,7 @@ class InstanceModel extends model $extra = json_decode($log->extra); if(empty($extra) or !isset($extra->data)) { - echo $logText; - return; + return $logText; } switch($log->action) @@ -1918,7 +1902,7 @@ class InstanceModel extends model default: } - echo $logText; + return $logText; } /* diff --git a/module/instance/ui/view.html.php b/module/instance/ui/view.html.php new file mode 100644 index 0000000000..f7c031689a --- /dev/null +++ b/module/instance/ui/view.html.php @@ -0,0 +1,153 @@ + + * @package instance + * @link http://www.zentao.net + */ + +namespace zin; + +$setting = usePager('pager'); + +$dynamicArticlesWd = array(); +foreach($seniorAppList as $article) +{ + $dynamicArticlesWd[] = h::tr(h::td(a($article->title, set::href($article->url), set::target('_bland')))); +} + +detailHeader( + to::prefix(''), + to::title(''), +); +detailBody +( + sectionList + ( + section + ( + div + ( + setClass('flex justify-between'), + div + ( + setClass('flex'), + img(set::src($instance->logo), setStyle(array('width' => '50px', 'height' => '50px'))), + div + ( + setClass('ml-3 flex col gap-y-1'), + div + ( + $instance->name, setClass('text-xl'), + span($cloudApp->app_version, setClass('ml-3 label lighter rounded-full')) + ), + div + ( + setClass('flex progress-container'), + icon('cog-outline text-warning'), + $lang->instance->cpuUsage, + div + ( + setClass('progress rounded-lg'), + setStyle('background', 'var(--color-warning-50)'), + div + ( + setClass('progress-bar warning'), + set::role('progressbar'), + setStyle('width', $instanceMetric->cpu->rate . '%') + ) + ), + icon('desktop text-primary'), + $lang->instance->memUsage, + span + ( + setClass('text-gray'), + sprintf($lang->instance->memTotal, ceil($instanceMetric->memory->limit/1024/1024/1024)), + ), + div + ( + setClass('progress rounded-lg'), + setStyle('background', 'var(--color-primary-50)'), + div + ( + setClass('progress-bar primary'), + set::role('progressbar'), + setStyle('width', $instanceMetric->memory->rate . '%') + ) + ) + ), + ), + ), + btn($lang->instance->setting, setClass('btn ghost'), set::icon('backend')) + ), + ), + section + ( + set::title($lang->instance->baseInfo), + set::useHtml(true), + h::table + ( + setStyle('min-width', '700px'), + setClass('table w-auto max-w-full bordered mt-4'), + h::tr + ( + h::th($lang->instance->status), + h::th($lang->instance->source), + h::th($lang->instance->appTemplate), + h::th($lang->instance->installAt), + h::th($lang->instance->runDuration), + $defaultAccount ? h::th($lang->instance->defaultAccount) : null, + $defaultAccount ? h::th($lang->instance->defaultPassword) : null, + ), + h::tr + ( + h::td + ( + span + ( + setClass('label label-dot mr-1 ' . zget($this->lang->instance->htmlStatusesClass, $instance->status, '')) + ), + zget($this->lang->instance->statusList, $instance->status, ''), setClass('text-' . zget($this->lang->instance->htmlStatusesClass, $instance->status, '')) + ), + h::td(zget($lang->instance->sourceList, $instance->source, '')), + h::td(a(set::href($this->createLink('store', 'appView', "id=$instance->appID")), $instance->appName)), + h::td(substr($instance->createdAt, 0, 16)), + h::td(common::printDuration($instance->runDuration)), + $defaultAccount ? h::th($defaultAccount->username) : null, + $defaultAccount ? h::th($defaultAccount->password) : null, + ) + ) + ), + // section + // ( + // set::title($lang->instance->appDynamic), + // set::content(empty($dynamicArticles) ? $lang->instance->noDynamicArticle : ''), + // empty($dynamicArticles) ? '' : div + // ( + // setClass('border pb-5 pt-5'), + // h::table + // ( + // setID('dynamicTable'), + // setClass('table borderless table-hover mb-3'), + // ...$dynamicArticlesWd, + // ), + // pager( + // setID('dynamicPager'), + // set::page($setting['page']), + // set::recTotal($setting['recTotal']), + // set::recPerPage($setting['recPerPage']), + // set::linkCreator($setting['linkCreator']), + // set::items($setting['items']), + // set::gap($setting['gap']), + // ), + // ) + // ) + ), + history() +); + diff --git a/module/instance/view/baseinfo.html.php b/module/instance/view/baseinfo.html.php index 16f2912585..bcdf7c9640 100644 --- a/module/instance/view/baseinfo.html.php +++ b/module/instance/view/baseinfo.html.php @@ -8,7 +8,7 @@ instance->status;?> - instance->printStatus($instance);?> + instance->printStatus($instance, false);?>