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