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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user