From fb44aead395c142498d1896026493c89064fbc08 Mon Sep 17 00:00:00 2001 From: AtakanColak Date: Mon, 9 Nov 2020 10:00:22 +0300 Subject: [PATCH] use ticker and explicit contants --- load/load_windows.go | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/load/load_windows.go b/load/load_windows.go index 381f61e..4cbe19a 100644 --- a/load/load_windows.go +++ b/load/load_windows.go @@ -5,6 +5,7 @@ package load import ( "context" "log" + "math" "sync" "time" @@ -26,15 +27,12 @@ var ( // see https://psutil.readthedocs.io/en/latest/#psutil.getloadavg // code https://github.com/giampaolo/psutil/blob/8415355c8badc9c94418b19bdf26e622f06f0cce/psutil/arch/windows/wmi.c func loadAvgGoroutine() { - const ( - loadAvgFactor1F = 0.9200444146293232478931553241 - loadAvgFactor5F = 0.9834714538216174894737477501 - loadAvgFactor15F = 0.9944598480048967508795473394 - ) - var ( - sleepInterval time.Duration = 5 * time.Second - currentLoad float64 + samplingFrequency time.Duration = 5 * time.Second + loadAvgFactor1M float64 = 1 / math.Exp(samplingFrequency.Seconds()/time.Minute.Seconds()) + loadAvgFactor5M float64 = 1 / math.Exp(samplingFrequency.Seconds()/(5*time.Minute).Seconds()) + loadAvgFactor15M float64 = 1 / math.Exp(samplingFrequency.Seconds()/(15*time.Minute).Seconds()) + currentLoad float64 ) counter, err := common.ProcessorQueueLengthCounter() @@ -45,6 +43,7 @@ func loadAvgGoroutine() { return } + tick := time.NewTicker(samplingFrequency).C for { currentLoad, loadErr = counter.GetValue() if loadErr != nil { @@ -70,13 +69,13 @@ func loadAvgGoroutine() { } } } - loadAvg1M = loadAvg1M*loadAvgFactor1F + currentLoad*(1.0-loadAvgFactor1F) - loadAvg5M = loadAvg5M*loadAvgFactor5F + currentLoad*(1.0-loadAvgFactor5F) - loadAvg15M = loadAvg15M*loadAvgFactor15F + currentLoad*(1.0-loadAvgFactor15F) + loadAvg1M = loadAvg1M*loadAvgFactor1M + currentLoad*(1-loadAvgFactor1M) + loadAvg5M = loadAvg5M*loadAvgFactor5M + currentLoad*(1-loadAvgFactor5M) + loadAvg15M = loadAvg15M*loadAvgFactor15M + currentLoad*(1-loadAvgFactor15M) SKIP: loadAvgMutex.Unlock() - time.Sleep(sleepInterval) + <-tick loadAvgMutex.Lock() } }