40 lines
1.3 KiB
Go
40 lines
1.3 KiB
Go
package devices
|
|
|
|
// TODO: https://github.com/elastic/go-sysinfo
|
|
// TODO: https://github.com/mackerelio/go-osstat
|
|
// TODO: https://github.com/akhenakh/statgo
|
|
// TODO: https://github.com/jaypipes/ghw
|
|
|
|
import (
|
|
"log"
|
|
"time"
|
|
)
|
|
|
|
var cpuFuncs []func(map[string]int, bool) map[string]error
|
|
|
|
// RegisterCPU adds a new CPU device to the CPU widget. labels returns the
|
|
// names of the devices; they should be as short as possible, and the indexes
|
|
// of the returned slice should align with the values returned by the percents
|
|
// function. The percents function should return the percent CPU usage of the
|
|
// device(s), sliced over the time duration supplied. If the bool argument to
|
|
// percents is true, it is expected that the return slice
|
|
//
|
|
// labels may be called once and the value cached. This means the number of
|
|
// cores should not change dynamically.
|
|
func RegisterCPU(f func(map[string]int, bool) map[string]error) {
|
|
cpuFuncs = append(cpuFuncs, f)
|
|
}
|
|
|
|
// CPUPercent calculates the percentage of cpu used either per CPU or combined.
|
|
// Returns one value per cpu, or a single value if percpu is set to false.
|
|
func UpdateCPU(cpus map[string]int, interval time.Duration, logical bool) {
|
|
for _, f := range cpuFuncs {
|
|
errs := f(cpus, logical)
|
|
if errs != nil {
|
|
for k, e := range errs {
|
|
log.Printf("%s: %s", k, e)
|
|
}
|
|
}
|
|
}
|
|
}
|