metrics: replace gosigar with gopsutil (#21041)
* replace gosigar with gopsutil * removed check for whether GOOS is openbsd * removed accidental import of runtime * potential fix for difference in units between gosig and gopsutil * fixed lint error * remove multiplication factor * uses cpu.ClocksPerSec as the multiplication factor * changed dependency from shirou to renaynay (#20) * updated dep * switching back from using renaynay fork to using upstream as PRs were merged on upstream * removed empty line * optimized imports * tidied go mod
This commit is contained in:
@ -18,14 +18,22 @@
|
||||
|
||||
package metrics
|
||||
|
||||
import "github.com/elastic/gosigar"
|
||||
import (
|
||||
"github.com/ethereum/go-ethereum/log"
|
||||
"github.com/shirou/gopsutil/cpu"
|
||||
)
|
||||
|
||||
// ReadCPUStats retrieves the current CPU stats.
|
||||
func ReadCPUStats(stats *CPUStats) {
|
||||
global := gosigar.Cpu{}
|
||||
global.Get()
|
||||
|
||||
stats.GlobalTime = int64(global.User + global.Nice + global.Sys)
|
||||
stats.GlobalWait = int64(global.Wait)
|
||||
// passing false to request all cpu times
|
||||
timeStats, err := cpu.Times(false)
|
||||
if err != nil {
|
||||
log.Error("Could not read cpu stats", "err", err)
|
||||
return
|
||||
}
|
||||
// requesting all cpu times will always return an array with only one time stats entry
|
||||
timeStat := timeStats[0]
|
||||
stats.GlobalTime = int64((timeStat.User + timeStat.Nice + timeStat.System) * cpu.ClocksPerSec)
|
||||
stats.GlobalWait = int64((timeStat.Iowait) * cpu.ClocksPerSec)
|
||||
stats.LocalTime = getProcessCPUTime()
|
||||
}
|
||||
|
Reference in New Issue
Block a user