From f4e23559a2bad85fca1eeea695331ce38ff3f494 Mon Sep 17 00:00:00 2001 From: Lomanic Date: Sun, 7 Jul 2019 20:19:25 +0200 Subject: [PATCH] [process] Fix #599 cap percent values returned by *Percent() between 0 and 100 --- process/process.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/process/process.go b/process/process.go index a9d10e0..cc378d3 100644 --- a/process/process.go +++ b/process/process.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "errors" + "math" "runtime" "time" @@ -212,7 +213,7 @@ func calculatePercent(t1, t2 *cpu.TimesStat, delta float64, numcpu int) float64 } delta_proc := t2.Total() - t1.Total() overall_percent := ((delta_proc / delta) * 100) * float64(numcpu) - return overall_percent + return math.Min(100, math.Max(0, overall_percent)) } // MemoryPercent returns how many percent of the total RAM this process uses @@ -233,7 +234,7 @@ func (p *Process) MemoryPercentWithContext(ctx context.Context) (float32, error) } used := processMemory.RSS - return (100 * float32(used) / float32(total)), nil + return float32(math.Min(100, math.Max(0, (100*float64(used)/float64(total))))), nil } // CPU_Percent returns how many percent of the CPU time this process uses @@ -258,5 +259,5 @@ func (p *Process) CPUPercentWithContext(ctx context.Context) (float64, error) { return 0, nil } - return 100 * cput.Total() / totalTime, nil + return math.Min(100, math.Max(0, 100*cput.Total()/totalTime)), nil }