fix(hub): color host status summary metrics green/red and bust css cache

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-13 14:26:26 +08:00
parent 47910e6cb3
commit c95ca6ac35
3 changed files with 72 additions and 14 deletions
+49 -11
View File
@@ -161,18 +161,56 @@
}
}
function hostStatusSummaryText(data) {
if (!data || !data.ok) return (data && data.msg) || "状态不可用";
function hostMetricSummaryHtml(label, percent) {
const p = Number(percent);
if (!Number.isFinite(p)) {
return esc(label) + " —";
}
const tone = hostMetricLevel(p);
return (
esc(label) +
' <span class="host-metric-tone ' +
tone +
'">' +
p +
"%</span>"
);
}
function renderHostStatusSummary(data, el) {
if (!el) return;
if (!data || !data.ok) {
el.className = "host-status-summary-text bad";
el.textContent = (data && data.msg) || "状态不可用";
return;
}
const cpu = data.cpu || {};
const mem = data.memory || {};
const disk = data.disk || {};
const parts = [];
const host = String(data.hostname || "").trim();
if (host) parts.push(host);
if (cpu.percent != null) parts.push("CPU " + cpu.percent + "%");
if (mem.percent != null) parts.push("内存 " + mem.percent + "%");
if (disk.percent != null) parts.push("硬盘 " + disk.percent + "%");
return parts.join(" · ") || "—";
if (host) {
parts.push('<span class="host-summary-host">' + esc(host) + "</span>");
}
if (cpu.percent != null) parts.push(hostMetricSummaryHtml("CPU", cpu.percent));
if (mem.percent != null) parts.push(hostMetricSummaryHtml("内存", mem.percent));
if (disk.percent != null) parts.push(hostMetricSummaryHtml("硬盘", disk.percent));
el.className = "host-status-summary-text";
el.innerHTML = parts.length
? parts.join(' <span class="host-summary-sep">·</span> ')
: "—";
}
function setHostMetricVal(el, percent) {
if (!el) return;
const p = Number(percent);
el.classList.remove("ok", "bad");
if (!Number.isFinite(p)) {
el.textContent = "—";
return;
}
el.textContent = p + "%";
el.classList.add(hostMetricLevel(p));
}
let hostStatusPanelInited = false;
@@ -208,7 +246,7 @@
const netUp = document.getElementById("host-net-up");
const netDown = document.getElementById("host-net-down");
panel.classList.remove("hidden");
if (summaryText) summaryText.textContent = hostStatusSummaryText(data);
renderHostStatusSummary(data, summaryText);
if (!data || !data.ok) {
if (dot) dot.className = "host-status-dot bad";
if (name) {
@@ -244,14 +282,14 @@
setHostMetricBar(document.getElementById("host-cpu-fill"), cpu.percent);
setHostMetricBar(document.getElementById("host-mem-fill"), mem.percent);
setHostMetricBar(document.getElementById("host-disk-fill"), disk.percent);
if (cpuVal) cpuVal.textContent = cpu.percent != null ? cpu.percent + "%" : "—";
setHostMetricVal(cpuVal, cpu.percent);
setHostMetricVal(memVal, mem.percent);
setHostMetricVal(diskVal, disk.percent);
if (cpuSub) cpuSub.textContent = cpu.count ? cpu.count + " 核" : "";
if (memVal) memVal.textContent = mem.percent != null ? mem.percent + "%" : "—";
if (memSub) {
memSub.textContent =
fmtHostBytes(mem.used_bytes) + " / " + fmtHostBytes(mem.total_bytes);
}
if (diskVal) diskVal.textContent = disk.percent != null ? disk.percent + "%" : "—";
if (diskSub) {
diskSub.textContent =
fmtHostBytes(disk.used_bytes) + " / " + fmtHostBytes(disk.total_bytes);