use ticker and explicit contants

pull/977/head
AtakanColak 5 years ago
parent 498a39984d
commit fb44aead39

@ -5,6 +5,7 @@ package load
import (
"context"
"log"
"math"
"sync"
"time"
@ -26,14 +27,11 @@ 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
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
)
@ -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()
}
}

Loading…
Cancel
Save