From 2e3d272e265299a42e1bfcf5d0156794ed49bf00 Mon Sep 17 00:00:00 2001 From: "Claude (Chronicler #78)" Date: Sat, 11 Apr 2026 10:30:43 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20RAM=20percentage=20parsing=20=E2=80=94?= =?UTF-8?q?=20handle=20Mi=20vs=20Gi=20units?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Panel VPS and Trinity Core report used RAM in Mi (e.g. 703Mi) while total is in Gi (e.g. 1.9Gi). parseFloat gave 703/1.9 = 37000%. Now normalizes both values to Gi before calculating percentage. Chronicler #78 | firefrost-services --- .../src/routes/admin/infrastructure.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/services/arbiter-3.0/src/routes/admin/infrastructure.js b/services/arbiter-3.0/src/routes/admin/infrastructure.js index fd74c1e..4e49fea 100644 --- a/services/arbiter-3.0/src/routes/admin/infrastructure.js +++ b/services/arbiter-3.0/src/routes/admin/infrastructure.js @@ -100,10 +100,17 @@ function parseAuditOutput(output) { const cpuModel = lines.find(l => l.includes('Model name'))?.split(':')[1]?.trim() || '?'; const cpuCores = lines.find(l => l.match(/^CPU\(s\)/))?.split(':')[1]?.trim() || '?'; - // Parse RAM percentage - const totalGi = parseFloat(totalRam); - const usedGi = parseFloat(usedRam); - const ramPct = totalGi > 0 ? Math.round((usedGi / totalGi) * 100) : 0; + // Parse RAM percentage (handle Gi vs Mi units) + function toGi(val) { + if (!val) return 0; + const num = parseFloat(val); + if (val.includes('Mi')) return num / 1024; + if (val.includes('Gi')) return num; + return num; + } + const ramPct = toGi(totalRam) > 0 + ? Math.round((toGi(usedRam) / toGi(totalRam)) * 100) + : 0; return { hostname,