From fb883761551bc8e950f6d16141b2e9074591129b Mon Sep 17 00:00:00 2001 From: Mirza Hasanbasic Date: Thu, 12 Feb 2026 22:51:57 +0100 Subject: [PATCH] Changes made to glances --- assets/js/main.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/assets/js/main.js b/assets/js/main.js index 2526f30..f0be396 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -120,12 +120,19 @@ // Rich monitor parsers this.parsers = { - glances: (data) => `CPU ${Math.round(data.cpu_percent)}% | RAM ${Math.round(data.mem_percent)}%`, + glances: (data) => { + // Glances v4 uses 'cpu'/'mem', v3 uses 'cpu_percent'/'mem_percent' + const cpu = data.cpu ?? data.cpu_percent; + const mem = data.mem ?? data.mem_percent; + if (cpu == null || mem == null) return 'No data'; + return `CPU ${Math.round(cpu)}% | RAM ${Math.round(mem)}%`; + }, uptime: (data) => { const groups = data.heartbeatList || {}; const monitors = Object.values(groups); const total = monitors.length; - const up = monitors.filter(beats => beats.length > 0 && beats[beats.length - 1].status === 1).length; + if (total === 0) return 'No monitors'; + const up = monitors.filter(beats => Array.isArray(beats) && beats.length > 0 && beats[beats.length - 1].status === 1).length; return `${up}/${total} services up`; }, cadvisor: (data) => { @@ -162,9 +169,11 @@ if (!res.ok) throw new Error(`HTTP ${res.status}`); const data = await res.json(); + const result = this.parsers[mon.parseType](data); dot.className = 'status-dot ok'; - value.textContent = this.parsers[mon.parseType](data); - } catch { + value.textContent = result; + } catch (err) { + console.warn(`[StatusMonitor] ${mon.label} failed:`, err); dot.className = 'status-dot error'; value.textContent = 'Unreachable'; }