diff --git a/plugins/sentinel/dashboard.html b/plugins/sentinel/dashboard.html
index d750d57..9c0999c 100644
--- a/plugins/sentinel/dashboard.html
+++ b/plugins/sentinel/dashboard.html
@@ -86,6 +86,7 @@
// 确保 chart.js 已加载 (SPA 导航时可能未加载)
var pollTimer = null;
+ var _chartInstances = {};
var editingId = null;
var _layoutMode = 'grid'; // 'grid' | 'row'
@@ -94,6 +95,8 @@
var btn = document.getElementById("btn-layout");
var grid = document.getElementById("sentinel-grid");
// 销毁旧图表
+ Object.keys(_chartInstances).forEach(function(k){ if(_chartInstances[k]) _chartInstances[k].forEach(function(c){ if(c.destroy)c.destroy(); }); });
+ _chartInstances = {};
_cardCache = {};
_firstRender = true;
grid.innerHTML = '
加载中...
';
@@ -120,6 +123,8 @@
}
// ═══ 仪表盘 ═══
+ Object.keys(_chartInstances).forEach(function(k){ if(_chartInstances[k]) _chartInstances[k].forEach(function(c){ if(c.destroy)c.destroy(); }); });
+ _chartInstances = {};
var _cardCache = {};
function animateValue(el, oldVal, newVal, decimals, suffix) {
@@ -143,6 +148,8 @@
var grid = document.getElementById("sentinel-grid");
if (!nodes.length) {
grid.innerHTML = ''+
- '
'+
- '
'+
- '
'+
- '
'+
+ '
'+
+ '
'+
+ '
'+
+ '
'+
+ if (typeof MiniChart !== "undefined") {
+ _chartInstances[id] = [
+ new MiniChart(body.querySelector(".chart-cpu"), "#7aa2f7"),
+ new MiniChart(body.querySelector(".chart-mem"), "#9ece6a"),
+ new MiniChart(body.querySelector(".chart-net"), "#e0af68"),
+ ];
+ }
+ ''+
'
';
} else {
body.innerHTML =
@@ -240,18 +254,20 @@
}
if (isRow) {
- // 横版: 更新数值 + 内存详情
- body.querySelector('.net-down').textContent = fmtSpeed(net.rx_bytes_sec||0);
- body.querySelector('.net-up').textContent = fmtSpeed(net.tx_bytes_sec||0);
- var md = body.querySelector('.mem-detail-val');
- if (md) md.textContent = (mem.used_gb||0).toFixed(1) + '/' + (mem.total_gb||0).toFixed(1) + ' GB';
- animateValue(body.querySelector('.cpu-val'), oldCpu, cpuVal, 1, '%');
- animateValue(body.querySelector('.mem-val'), oldMem, memVal, 1, '%');
- // 右边摘要
+ var charts = _chartInstances[id];
+ if (charts && charts[0]) {
+ charts[0].update(cpuVal);
+ charts[1].update(memVal);
+ charts[2].update(net.rx_bytes_sec||0);
+ }
var right = card.querySelector('.card-right');
if (right) right.innerHTML =
- '
'+
- (n.last_seen ? new Date(n.last_seen*1000).toLocaleTimeString() : '—')+'
';
+ '
CPU '+(cpuVal).toFixed(1)+'%
'+
+ '
MEM '+(memVal).toFixed(1)+'%
'+
+ '
'+(mem.used_gb||0).toFixed(1)+'/'+(mem.total_gb||0).toFixed(1)+' GB
'+
+ '
↓ '+fmtSpeed(net.rx_bytes_sec||0)+'
'+
+ '
↑ '+fmtSpeed(net.tx_bytes_sec||0)+'
'+
+ '
'+(n.last_seen ? new Date(n.last_seen*1000).toLocaleTimeString() : '—')+'
';
} else {
body.querySelector('.net-down').textContent = fmtSpeed(net.rx_bytes_sec||0);
body.querySelector('.net-up').textContent = fmtSpeed(net.tx_bytes_sec||0);