fix: Node Health view — remove partial include, inline server-side render

This commit is contained in:
Claude Chronicler #88
2026-04-14 06:23:24 +00:00
parent a01d7b9d7f
commit 648f577446

View File

@@ -195,10 +195,90 @@
<% if (!nodes) { %>
<div style="grid-column:1/-1; color:#ef4444; padding:20px;">Failed to load node data. <%= error || '' %></div>
<% } else { %>
<% const nodeIds = ['nc1-charlotte', 'tx1-dallas']; %>
<% nodeIds.forEach(function(id) { %>
<% const node = nodes[id]; %>
<%- include('_node_card', { node, id }) %>
<% ['nc1-charlotte', 'tx1-dallas'].forEach(function(id) { %>
<% const n = nodes[id]; %>
<% if (!n.online) { %>
<div class="nh-node-card">
<div class="nh-node-header">
<div class="nh-node-dot" style="background:#ef4444;"></div>
<span class="nh-node-title"><%= n.label %></span>
<span class="nh-node-role"><%= n.role %></span>
</div>
<div class="nh-offline">⚠ Node unreachable</div>
</div>
<% } else { %>
<div class="nh-node-card">
<div class="nh-node-header">
<div class="nh-node-dot" style="background:<%= n.color %>;"></div>
<span class="nh-node-title"><%= n.label %></span>
<span class="nh-node-role"><%= n.role %></span>
</div>
<div class="nh-body">
<div class="nh-info-row">
<div class="nh-info-pill">
<div class="val"><%= n.uptime %></div>
<div class="lbl">UPTIME</div>
</div>
<div class="nh-info-pill">
<div class="val"><%= n.cpuPct %>%</div>
<div class="lbl">CPU USAGE</div>
</div>
</div>
<div class="nh-section-title">Load Average</div>
<div class="nh-load-row">
<div class="nh-load-pill">
<div class="nh-load-val"><%= n.load[0].toFixed(2) %></div>
<div class="nh-load-lbl">1 MIN</div>
</div>
<div class="nh-load-pill">
<div class="nh-load-val"><%= n.load[1].toFixed(2) %></div>
<div class="nh-load-lbl">5 MIN</div>
</div>
<div class="nh-load-pill">
<div class="nh-load-val"><%= n.load[2].toFixed(2) %></div>
<div class="nh-load-lbl">15 MIN</div>
</div>
</div>
<div class="nh-section-title">Memory</div>
<div class="nh-bar-wrap">
<div class="nh-bar <%= n.ram.pct >= 85 ? 'bar-crit' : n.ram.pct >= 70 ? 'bar-warn' : 'bar-ok' %>" style="width:<%= n.ram.pct %>%"></div>
</div>
<div class="nh-bar-label">
<span><%= n.ram.used %> used</span>
<span><%= n.ram.pct %>% of <%= n.ram.total %></span>
</div>
<div class="nh-section-title">Disk</div>
<div class="nh-bar-wrap">
<div class="nh-bar <%= n.disk.pct >= 85 ? 'bar-crit' : n.disk.pct >= 70 ? 'bar-warn' : 'bar-ok' %>" style="width:<%= n.disk.pct %>%"></div>
</div>
<div class="nh-bar-label">
<span><%= n.disk.used %> used</span>
<span><%= n.disk.pct %>% of <%= n.disk.total %></span>
</div>
<div class="nh-section-title">Temperatures</div>
<% if (n.temps && Object.keys(n.temps).length > 0) { %>
<% Object.entries(n.temps).forEach(function([key, t]) { %>
<% const cls = t.c >= 85 ? 'temp-crit' : t.c >= 70 ? 'temp-hot' : t.c >= 55 ? 'temp-warm' : 'temp-ok'; %>
<div class="nh-temp-row">
<span class="nh-temp-label"><%= key %></span>
<div class="nh-temp-values">
<span class="nh-temp-c <%= cls %>"><%= t.c %>°C</span>
<span class="nh-temp-f"><%= t.f %>°F</span>
</div>
</div>
<% }); %>
<% } else { %>
<div style="color:#666;font-size:11px;">No sensor data</div>
<% } %>
</div>
</div>
<% } %>
<% }); %>
<% } %>
</div>