fix: Node Health view — remove partial include, inline server-side render
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user