diff --git a/plugins/sentinel/dashboard.html b/plugins/sentinel/dashboard.html index 87aa53b..e0eacae 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"); // 销毁旧图表 + try { Object.keys(_chartInstances).forEach(function(k){ if(_chartInstances[k]) _chartInstances[k].forEach(function(c){ if(c.destroy)c.destroy(); }); }); } catch(e) {} + _chartInstances = {}; _cardCache = {}; _firstRender = true; grid.innerHTML = '
加载中...
'; @@ -144,7 +147,9 @@ var grid = document.getElementById("sentinel-grid"); if (!nodes.length) { grid.innerHTML = '
暂无节点 — 切换到节点管理添加
'; - _cardCache = {}; + try { Object.keys(_chartInstances).forEach(function(k){ if(_chartInstances[k]) _chartInstances[k].forEach(function(c){ if(c.destroy)c.destroy(); }); }); } catch(e) {} + _chartInstances = {}; + _cardCache = {}; _firstRender = true; return; } @@ -182,6 +187,11 @@ ''+ '
'+ '
'+ + '
'+ + '
'+ + '
'+ + '
'+ + '
'+ '
'+ '
CPU
0%
'+ '
MEM
0%
'+ @@ -193,6 +203,16 @@ '
'+ '
'+ '
'; + if (typeof MiniChart !== 'undefined') { + var mcBody = card.querySelector('.metrics-body'); + if (mcBody) { + _chartInstances[id] = [ + new MiniChart(mcBody.querySelector('.chart-cpu'), '#7aa2f7'), + new MiniChart(mcBody.querySelector('.chart-mem'), '#9ece6a'), + new MiniChart(mcBody.querySelector('.chart-net'), '#e0af68'), + ]; + } + } } else { card.innerHTML = '
'+(n.online?'🟢':'🔴')+' '+esc(n.name)+'
'+ @@ -229,6 +249,10 @@ body.setAttribute('data-mem', (sys.memory||{}).percent||0); if (isRow) { + var charts = _chartInstances[id]; + if (charts && charts[0]) { + try { charts[0].update(cpuVal); charts[1].update(memVal); charts[2].update(net.rx_bytes_sec||0); } catch(e) {} + } body.querySelector('.net-down').textContent = fmtSpeed(net.rx_bytes_sec||0); body.querySelector('.net-up').textContent = fmtSpeed(net.tx_bytes_sec||0); var md3 = body.querySelector('.mem-detail-val');