Files
rpi5-health/internal/load_average/linux_loadavg.go
T

56 lines
1.2 KiB
Go

//go:build linux
package loadaverage
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func getLinuxLoadAverage() (LoadAverageInformation, error) {
loadFile, err := os.Open("/proc/loadavg")
if err != nil {
return LoadAverageInformation{}, fmt.Errorf("Could not find /proc/loadavg. Are you sure you are on linux?")
}
defer loadFile.Close()
fileReader := bufio.NewScanner(loadFile)
var one_m float64
var five_m float64
var fifteen_m float64
fileReader.Scan()
if fileReader.Err() != nil {
return LoadAverageInformation{}, fmt.Errorf("Could not read /proc/uptime.")
}
data := fileReader.Text()
/*
* fields[0] One minute load average
* fields[1] Five minute load average
* fields[2] Fifteen minute load average
* fields[3] Currently executing/total scheduled
* fields[4] Most recent process PID
*/
fields := strings.Split(data, " ")
one_m, _ = strconv.ParseFloat(fields[0], 64)
five_m, _ = strconv.ParseFloat(fields[1], 64)
fifteen_m, _ = strconv.ParseFloat(fields[2], 64)
return LoadAverageInformation{
Load1: one_m,
Load5: five_m,
Load15: fifteen_m,
}, nil
}
func GetLoadAverage() (LoadAverageInformation, error) {
return getLinuxLoadAverage()
}