diff --git a/services/web-ui/public/screens-home.jsx b/services/web-ui/public/screens-home.jsx
index 41ee679..2f8347b 100644
--- a/services/web-ui/public/screens-home.jsx
+++ b/services/web-ui/public/screens-home.jsx
@@ -8,6 +8,8 @@ function Home({ navigate }) {
const failedJobs = JOBS.filter(j => j.status === 'failed').length;
const recentAssets = [...ASSETS].sort((a, b) => new Date(b.created_at) - new Date(a.created_at)).slice(0, 6);
+ const nodesOnline = NODES.filter(n => n.status === 'online' || n.online === true).length;
+
const spark = (n, base = 10) => Array.from({ length: 13 }, (_, i) => base + Math.round(Math.sin(i * 0.7 + n) * base * 0.3));
return (
@@ -42,7 +44,7 @@ function Home({ navigate }) {
Cluster nodes
-
{NODES.filter(n => n.online).length} / {NODES.length} online
+
{nodesOnline} / {NODES.length} online
Last heartbeat <30s
@@ -101,15 +103,22 @@ function Home({ navigate }) {
{NODES.length === 0
?
No nodes found.
- : NODES.slice(0, 4).map(n => (
-
-
- {n.hostname}
-
- {n.cpu_usage != null && CPU {n.cpu_usage}%}
- {n.mem_used_mb != null && {Math.round(n.mem_used_mb / 1024)}GB RAM}
-
- ))}
+ : NODES.slice(0, 4).map(n => {
+ const nodeId = n.id || n.hostname || n.name || 'node';
+ const isOnline = n.status === 'online' || n.online === true;
+ const cpuPct = n.cpu_percent ?? n.cpu ?? n.cpu_usage ?? null;
+ const memRaw = n.memory_used_gb ?? n.mem ?? (n.mem_used_mb != null ? n.mem_used_mb / 1024 : null);
+ const memGb = memRaw != null ? Number(memRaw) : null;
+ return (
+
+
+ {nodeId}
+
+ {cpuPct != null && CPU {Math.round(cpuPct)}%}
+ {memGb != null && {memGb < 1 ? Math.round(memGb * 1024) + 'MB' : memGb.toFixed(1) + 'GB'} RAM}
+
+ );
+ })}