From af4877ca300346ee7d4a0c3d4cc26de605d446c0 Mon Sep 17 00:00:00 2001 From: Henry Dollman Date: Sat, 5 Oct 2024 15:29:27 -0400 Subject: [PATCH] add MEM_CALC env var --- beszel/internal/agent/agent.go | 2 ++ beszel/internal/agent/system.go | 17 +++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/beszel/internal/agent/agent.go b/beszel/internal/agent/agent.go index ac35dc3..4244fcc 100644 --- a/beszel/internal/agent/agent.go +++ b/beszel/internal/agent/agent.go @@ -13,6 +13,7 @@ import ( type Agent struct { debug bool // true if LOG_LEVEL is set to debug + memCalc string // Memory calculation formula fsNames []string // List of filesystem device names being monitored fsStats map[string]*system.FsStats // Keeps track of disk stats for each filesystem netInterfaces map[string]struct{} // Stores all valid network interfaces @@ -26,6 +27,7 @@ type Agent struct { func NewAgent() *Agent { return &Agent{ sensorsContext: context.Background(), + memCalc: os.Getenv("MEM_CALC"), } } diff --git a/beszel/internal/agent/system.go b/beszel/internal/agent/system.go index fe0dc27..7cee4d3 100644 --- a/beszel/internal/agent/system.go +++ b/beszel/internal/agent/system.go @@ -52,12 +52,21 @@ func (a *Agent) getSystemStats() system.Stats { // memory if v, err := mem.VirtualMemory(); err == nil { + // cache + buffers value for default mem calculation + cacheBuff := v.Total - v.Free - v.Used + // htop memory calculation overrides + if a.memCalc == "htop" { + // note: gopsutil automatically adds SReclaimable to v.Cached + cacheBuff = v.Cached + v.Buffers - v.Shared + v.Used = v.Total - (v.Free + cacheBuff) + v.UsedPercent = float64(v.Used) / float64(v.Total) * 100.0 + } systemStats.Mem = bytesToGigabytes(v.Total) - systemStats.MemUsed = bytesToGigabytes(v.Used) - systemStats.MemBuffCache = bytesToGigabytes(v.Total - v.Free - v.Used) - systemStats.MemPct = twoDecimals(v.UsedPercent) systemStats.Swap = bytesToGigabytes(v.SwapTotal) - systemStats.SwapUsed = bytesToGigabytes(v.SwapTotal - v.SwapFree) + systemStats.SwapUsed = bytesToGigabytes(v.SwapTotal - v.SwapFree - v.SwapCached) + systemStats.MemBuffCache = bytesToGigabytes(cacheBuff) + systemStats.MemUsed = bytesToGigabytes(v.Used) + systemStats.MemPct = twoDecimals(v.UsedPercent) } // disk usage