This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
package hostcollect
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
"strings"
|
||||
|
||||
"github.com/itworx/pulse/internal/host"
|
||||
)
|
||||
|
||||
// parseLoadAverage reads the three load figures from /proc/loadavg. The remaining
|
||||
// fields (runnable/total tasks and last PID) are deliberately ignored: the domain has
|
||||
// no place for them and a process count from a PID namespace would be misleading.
|
||||
func parseLoadAverage(data []byte) (host.RawLoad, error) {
|
||||
fields := strings.Fields(string(data))
|
||||
if len(fields) < 3 {
|
||||
return host.RawLoad{}, errBadLoadAverage
|
||||
}
|
||||
values := [3]float64{}
|
||||
for index := 0; index < 3; index++ {
|
||||
value, ok := parseFloat(fields[index])
|
||||
if !ok || value < 0 || math.IsNaN(value) || math.IsInf(value, 0) {
|
||||
return host.RawLoad{}, errBadLoadAverage
|
||||
}
|
||||
values[index] = value
|
||||
}
|
||||
return host.RawLoad{One: values[0], Five: values[1], Fifteen: values[2]}, nil
|
||||
}
|
||||
|
||||
func (c *Collector) loadAverage() (host.RawLoad, error) {
|
||||
data, err := readLimited(c.procPath("loadavg"), maxProcessFileBytes)
|
||||
if err != nil {
|
||||
return host.RawLoad{}, fmt.Errorf("hostcollect: read loadavg: %w", err)
|
||||
}
|
||||
return parseLoadAverage(data)
|
||||
}
|
||||
Reference in New Issue
Block a user