diff --git a/module/cne/model.php b/module/cne/model.php index d48e34204c..503b2ab8ac 100644 --- a/module/cne/model.php +++ b/module/cne/model.php @@ -337,10 +337,11 @@ class cneModel extends model * Get instance metrics. * * @param array $instances + * @param bool $volumesMetrics * @access public * @return array */ - public function instancesMetrics(array $instances): array + public function instancesMetrics(array $instances, bool $volumesMetrics = true): array { $instancesMetrics = array(); @@ -369,7 +370,7 @@ class cneModel extends model $instanceMetric->memory->usage = 0; $instanceMetric->memory->rate = 0; - $instanceMetric->disk = $this->getVolumesMetrics($instance); + if($volumesMetrics) $instanceMetric->disk = $this->getVolumesMetrics($instance); $instancesMetrics[$instance->k8name] = $instanceMetric; } diff --git a/module/instance/model.php b/module/instance/model.php index bfa8caaab5..d7e1be29b8 100644 --- a/module/instance/model.php +++ b/module/instance/model.php @@ -118,10 +118,11 @@ class instanceModel extends model * @param string $pinned * @param string $searchParam * @param string $status + * @param bool $alertMark * @access public * @return array */ - public function getList(object $pager = null, string $pinned = '', string $searchParam = '', string $status = 'all') + public function getList(object $pager, string $pinned = '', string $searchParam = '', string $status = 'all', bool $alertMark = true) { $instances = $this->dao->select('instance.*')->from(TABLE_INSTANCE)->alias('instance') ->leftJoin(TABLE_SPACE)->alias('space')->on('space.id=instance.space') @@ -133,6 +134,8 @@ class instanceModel extends model ->beginIF($pager)->page($pager)->fi() ->fetchAll('id', false); + if(empty($instances)) return array(); + $spaces = $this->dao->select('*')->from(TABLE_SPACE) ->where('deleted')->eq(0) ->andWhere('id')->in(helper::arrayColumn($instances, 'space')) diff --git a/module/space/model.php b/module/space/model.php index c2a5479af5..d6bb2001e2 100644 --- a/module/space/model.php +++ b/module/space/model.php @@ -122,7 +122,9 @@ class spaceModel extends model ->page($pager) ->fetchAll('id', false); - $instances = $this->loadModel('store')->batchSetLatestVersions($instances); + if(empty($instances)) return array(); + + if($this->config->inQuickon) $instances = $this->loadModel('store')->batchSetLatestVersions($instances); $solutionIDList = helper::arrayColumn($instances, 'solution'); $solutions = $this->dao->select('*')->from(TABLE_SOLUTION)->where('id')->in($solutionIDList)->fetchAll('id'); diff --git a/module/system/control.php b/module/system/control.php index 3c20b0ba6c..d00c41dd94 100644 --- a/module/system/control.php +++ b/module/system/control.php @@ -31,8 +31,8 @@ class system extends control $this->app->loadClass('pager', true); $pager = new pager($total, $recPerPage, $pageID); - $instances = $this->loadModel('instance')->getList($pager, '', '', 'running'); - $instancesMetrics = $this->cne->instancesMetrics($instances); + $instances = $this->loadModel('instance')->getList($pager, '', '', 'running', false); + $instancesMetrics = $this->cne->instancesMetrics($instances, false); foreach($instances as &$instance) { @@ -42,14 +42,10 @@ class system extends control } $actions = $this->loadModel('action')->getDynamic('all', 'today'); - $cneMetrics = $this->cne->cneMetrics(); $this->view->title = $this->lang->my->common; $this->view->instances = $instances; $this->view->actions = $actions; - $this->view->cneMetrics = $cneMetrics; - $this->view->cpuInfo = $this->systemZen->getCpuUsage($cneMetrics->metrics->cpu); - $this->view->memoryInfo = $this->systemZen->getMemUsage($cneMetrics->metrics->memory); $this->view->pager = $pager; $this->display(); @@ -707,4 +703,23 @@ class system extends control { return $this->system->initSystem(); } + + /** + * 获取CNE平台的集群度量。 + * Get cluster metrics of CNE platform. + * + * @access public + * @return void + */ + public function ajaxCneMetrics() + { + $cneMetrics = $this->loadModel('cne')->cneMetrics(); + $result = array( + 'status' => $cneMetrics->status, + 'node_count' => $cneMetrics->node_count, + 'cpuInfo' => $this->systemZen->getCpuUsage($cneMetrics->metrics->cpu), + 'memoryInfo' => $this->systemZen->getMemUsage($cneMetrics->metrics->memory) + ); + return $this->send(array('result' => 'success', 'data' => $result)); + } } diff --git a/module/system/js/dashboard.ui.js b/module/system/js/dashboard.ui.js index 7e2d14f714..220e5c284d 100644 --- a/module/system/js/dashboard.ui.js +++ b/module/system/js/dashboard.ui.js @@ -1,5 +1,6 @@ let progressTemplate = '
'; let statusTemplate = '{text}'; +let cpuCircle, memoryCircle, cpuRate, memoryRate, cpuAnimationId, memoryAnimationId, cpuRateStart = 0, memoryRateStart = 0; window.renderInstanceList = function (result, {col, row, value}) { @@ -32,6 +33,7 @@ $(function() if(typeof timer !== 'undefined') clearInterval(timer); if(instanceIdList.length === 0) return; if(inQuickon) timer = setInterval(refreshStatus, 5000); + loadCneStatistic(); }); window.onPageUnmount = function() @@ -39,6 +41,35 @@ window.onPageUnmount = function() if(typeof timer !== 'undefined') clearInterval(timer); } +function loadCneStatistic() +{ + toggleLoading('#cpu-circle', true); + toggleLoading('#memory-circle', true); + toggleLoading('#status-icon', true); + toggleLoading('.cpu-rate', true); + toggleLoading('.cpu-memory', true); + toggleLoading('#cne-statistic .cne-status', true); + toggleLoading('#cne-statistic .node-quantity', true); + $.ajaxSubmit({ + url: $.createLink('system', 'ajaxCneMetrics'), + onComplete:function(res) + { + if(res.result === 'success') + { + $('#cpu-circle div').remove(); + $('#memory-circle div').remove(); + let cpuInfo = res.data.cpuInfo, memoryInfo = res.data.memoryInfo; + cpuInfo.tip = cpuInfo.tip.substring(cpuInfo.tip.indexOf('=') + 1).trim(); + memoryInfo.tip = memoryInfo.tip.substring(memoryInfo.tip.indexOf('=') + 1).trim(); + cpuRate = cpuInfo.rate; + memoryRate = memoryInfo.rate; + cpuCircle = new zui.ProgressCircle('#cpu-circle', {percent: 0, size: 160, circleColor: cpuInfo.color, circleWidth: 8, text: ''}); + memoryCircle = new zui.ProgressCircle('#memory-circle', {percent: 0, size : 160, circleColor: memoryInfo.color, circleWidth: 8, text: ''}); + } + } + }); +} + function refreshStatus() { const postData = new FormData(); @@ -66,4 +97,4 @@ function refreshStatus() } } }); -} +} \ No newline at end of file diff --git a/module/system/ui/dashboard.html.php b/module/system/ui/dashboard.html.php index 49e53dfbe8..cbd1b2755e 100644 --- a/module/system/ui/dashboard.html.php +++ b/module/system/ui/dashboard.html.php @@ -10,15 +10,11 @@ declare(strict_types=1); */ namespace zin; -$status = zget($cneMetrics, 'status', 'unknown'); $pageInfo = usePager(); -$cpuInfo['tip'] = trim(substr($cpuInfo['tip'], strpos($cpuInfo['tip'], '=') + 1)); -$memoryInfo['tip'] = trim(substr($memoryInfo['tip'], strpos($memoryInfo['tip'], '=') + 1)); - jsVar('inQuickon', $config->inQuickon); -jsVar('cpuInfo', $cpuInfo); -jsVar('memoryInfo', $memoryInfo); +jsVar('statusList', $lang->CNE->statusList); +jsVar('statusIcons', $lang->CNE->statusIcons); jsVar('instanceIdList', helper::arrayColumn($instances, 'id')); /* 资源统计 */ @@ -29,6 +25,7 @@ div div ( setClass('flex'), + setID('cne-statistic'), div ( setClass('basis-2/5 border h-40 rounded-md row'), @@ -38,12 +35,12 @@ div div ( setClass('flex row basis-2/3 justify-evenly h-full ml-5'), - icon(zget($this->lang->CNE->statusIcons, $status), set::size(30), setClass('app-status-circle status-' . $status)), + icon('unknown', set::id('status-icon'), set::size(30), setClass('app-status-circle status-unknown')), div ( setClass('p-2 ml-8 pr-6 flex col justify-between normal'), setStyle('white-space', 'nowrap'), - div(setClass('text-xl font-semibold'), zget($lang->CNE->statusList, $status)), + div(setClass('text-xl font-semibold cne-status')), $lang->system->cneStatus ), div(), @@ -59,7 +56,7 @@ div div ( setClass('flex col justify-between'), - div(setClass('text-4xl font-semibold text-primary'), $cneMetrics->node_count), + div(setClass('text-4xl font-semibold text-primary node-quantity')), $lang->system->nodeQuantity ), div @@ -79,29 +76,28 @@ div setClass(' flex row'), div ( + set::id('cpu-circle'), zui::ProgressCircle ( - set::percent($cpuInfo['rate']), + set::percent(0), set::size(160), - set::circleColor($cpuInfo['color']), + set::circleColor('gray'), set::circleWidth(8), set::text('') - ), setClass('relative'), span ( setClass('absolute text-lg'), setStyle(array('transform' => 'translate(-50%, -50%)', 'top' => '50%', 'left' => '50%', 'white-space' => 'nowrap')), - icon('cpu', setClass('mr-1'), set::size(20),setStyle('color', $cpuInfo['color'])), + icon('cpu', setClass('mr-1'), set::size(20), setStyle('color', 'gray')), $lang->system->cpuUsage ) ), div ( setClass('flex col justify-around p-5'), - div(setClass('text-4xl font-medium'), $cpuInfo['rate'], span('%', setClass('text-xl ml-1'))), - $cpuInfo['tip'] + div(setClass('text-4xl font-medium cpu-rate'), '0.00', span('%', setClass('text-xl ml-1'))), ) ), div @@ -109,11 +105,12 @@ div setClass(' flex row'), div ( + set::id('memory-circle'), zui::ProgressCircle ( - set::percent($memoryInfo['rate']), + set::percent(0), set::size(160), - set::circleColor($memoryInfo['color']), + set::circleColor('gray'), set::circleWidth(8), set::text('') @@ -123,15 +120,14 @@ div ( setClass('absolute text-lg'), setStyle(array('transform' => 'translate(-50%, -50%)', 'top' => '50%', 'left' => '50%', 'white-space' => 'nowrap')), - icon('memory', setClass('mr-1'), set::size(20), setStyle('color', $memoryInfo['color'])), + icon('memory', setClass('mr-1'), set::size(20), setStyle('color', 'gray')), $lang->system->memUsage ) ), div ( setClass('flex col justify-around p-5'), - div(setClass('text-4xl font-medium'), $memoryInfo['rate'], span('%', setClass('text-xl ml-1'))), - $memoryInfo['tip'] + div(setClass('text-4xl font-medium memory-rate'), '0.00', span('%', setClass('text-xl ml-1'))), ) ) ) @@ -152,4 +148,4 @@ div set::onRenderCell(jsRaw('window.renderInstanceList')), set::footPager(usePager()) ) -); +); \ No newline at end of file