//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() }