diff --git a/audit/internal/platform/live_metrics.go b/audit/internal/platform/live_metrics.go index 2438a76..9640b0a 100644 --- a/audit/internal/platform/live_metrics.go +++ b/audit/internal/platform/live_metrics.go @@ -304,6 +304,7 @@ func classifyLiveTempGroup(chip, name string) string { strings.Contains(text, "x86_pkg_temp"), strings.Contains(text, "tctl"), strings.Contains(text, "tdie"), + strings.Contains(text, "tccd"), strings.Contains(text, "cpu"), strings.Contains(text, "peci"): return "cpu" diff --git a/audit/internal/webui/pages.go b/audit/internal/webui/pages.go index f646657..ca50f11 100644 --- a/audit/internal/webui/pages.go +++ b/audit/internal/webui/pages.go @@ -407,11 +407,10 @@ func renderMetrics() string { -
+ @@ -456,17 +455,9 @@ const es = new EventSource('/api/metrics/stream'); es.addEventListener('metrics', e => { const d = JSON.parse(e.data); - // Update numeric tables - let sysHTML = ''; - (d.temps||[]).filter(t => t.group === 'cpu').forEach(t => { - sysHTML += ''+t.name+''+t.celsius.toFixed(1)+'°C'; - }); - if (d.cpu_load_pct) sysHTML += 'CPU Load'+d.cpu_load_pct.toFixed(1)+'%'; - if (d.mem_load_pct) sysHTML += 'Mem Load'+d.mem_load_pct.toFixed(1)+'%'; - (d.fans||[]).forEach(f => sysHTML += ''+f.name+''+f.rpm+' RPM'); - if (d.power_w) sysHTML += 'Power'+d.power_w.toFixed(0)+' W'; - const st = document.getElementById('sys-table'); - if (st) st.innerHTML = sysHTML ? ''+sysHTML+'
' : '

No sensor data (ipmitool/sensors required)

'; + // Show/hide Fan RPM card based on data availability + const fanCard = document.getElementById('card-server-fans'); + if (fanCard) fanCard.style.display = (d.fans && d.fans.length > 0) ? '' : 'none'; let gpuHTML = ''; (d.gpus||[]).forEach(g => {