diff --git a/posimai-dev/station-b.html b/posimai-dev/station-b.html index 04493787..8ccaad67 100644 --- a/posimai-dev/station-b.html +++ b/posimai-dev/station-b.html @@ -391,7 +391,7 @@ function updateRing(fillId,valId,pct,circ,base,warn,crit){ fill.style.strokeDashoffset=circ*(1-Math.min(pct,100)/100); const color=pct>80?(crit||'#F87171'):pct>60?(warn||'#FB923C'):(base||'#22D3EE'); fill.style.stroke=color; - valEl.textContent=pct>0?`${pct}%`:'—'; + valEl.textContent=`${pct}%`; valEl.style.fill=pct>80?'#F87171':pct>60?'#FB923C':'var(--text)'; } diff --git a/server.js b/server.js index 2fbff61f..f837a41b 100644 --- a/server.js +++ b/server.js @@ -762,6 +762,11 @@ function buildRouter() { const p = df.trim().split('\n')[1].split(/\s+/); disk = { total_gb: Math.round(parseInt(p[1])/1e9*10)/10, used_gb: Math.round(parseInt(p[2])/1e9*10)/10, use_pct: Math.round(parseInt(p[2])/parseInt(p[1])*100) }; } catch(_) {} + let users = 0; + try { + const whoOut = execSync('who 2>/dev/null', { timeout: 1000 }).toString().trim(); + users = whoOut ? whoOut.split('\n').filter(l => l.trim()).length : 0; + } catch(_) {} res.json({ ...base, gemini: !!genAI, @@ -770,6 +775,8 @@ function buildRouter() { mem_used_mb: Math.round((total - mem) / 1024 / 1024), mem_total_mb: Math.round(total / 1024 / 1024), disk, + users, + node_version: process.version, }); });