The variable should be assigned a value in the init function of platform-specific apply implementations. Signed-off-by: Ophestra Umiker <cat@ophivana.moe>
83 lines
1.5 KiB
Go
83 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
func init() {
|
|
if h, err := os.Hostname(); err != nil {
|
|
log.Fatalf("error reading hostname: %s", err)
|
|
} else {
|
|
hostname = h
|
|
}
|
|
}
|
|
|
|
func (s *applyState) populateLoadavg() {
|
|
if s.loadavg != nil {
|
|
return
|
|
}
|
|
|
|
if b, err := os.ReadFile("/proc/loadavg"); err != nil {
|
|
log.Printf("error reading loadavg: %s", err)
|
|
} else {
|
|
res := strings.SplitN(string(b), " ", 4)
|
|
if len(res) >= 3 {
|
|
s.loadavg = (*[3]string)(res[:3])
|
|
return
|
|
}
|
|
log.Printf("unexpected loadavg raw: %s", string(b))
|
|
}
|
|
|
|
s.loadavg = &[3]string{"?", "?", "?"}
|
|
}
|
|
|
|
func (s *applyState) populateMem() {
|
|
if s.mem != nil {
|
|
return
|
|
}
|
|
|
|
// failure defaults
|
|
s.mem = &[2]int{-1, -1}
|
|
|
|
if f, err := os.Open("/proc/meminfo"); err != nil {
|
|
log.Printf("error reading meminfo: %s", err)
|
|
} else {
|
|
defer func() {
|
|
if err = f.Close(); err != nil {
|
|
log.Fatalf("error closing meminfo: %s", err)
|
|
}
|
|
}()
|
|
|
|
p := bufio.NewScanner(f)
|
|
for p.Scan() {
|
|
res := strings.SplitN(strings.ReplaceAll(p.Text(), " ", ""), ":", 2)
|
|
if len(res) != 2 {
|
|
fmt.Printf("unexpected meminfo line: %s", p.Text())
|
|
return
|
|
}
|
|
|
|
format := func(r string) int {
|
|
var v int
|
|
if v, err = strconv.Atoi(r[:len(r)-2]); err != nil {
|
|
log.Printf("error parsing meminfo value: %s", err)
|
|
v = -1
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
switch res[0] {
|
|
case "MemFree":
|
|
s.mem[0] = format(res[1])
|
|
case "MemTotal":
|
|
s.mem[1] = format(res[1])
|
|
}
|
|
}
|
|
}
|
|
}
|