Files
og/internal/hoststats/memory_linux.go
T
2026-09-11 06:14:38 +02:00

47 lines
829 B
Go

//go:build linux
package hoststats
import (
"bufio"
"context"
"fmt"
"os"
"strconv"
"strings"
)
func readMemory(context.Context) (Memory, error) {
f, err := os.Open("/proc/meminfo")
if err != nil {
return Memory{}, err
}
defer f.Close()
var total, available int64
s := bufio.NewScanner(f)
for s.Scan() {
fields := strings.Fields(s.Text())
if len(fields) < 2 {
continue
}
v, _ := strconv.ParseInt(fields[1], 10, 64)
switch strings.TrimSuffix(fields[0], ":") {
case "MemTotal":
total = v * 1024
case "MemAvailable":
available = v * 1024
}
}
if err := s.Err(); err != nil {
return Memory{}, err
}
if total <= 0 {
return Memory{}, fmt.Errorf("MemTotal unavailable")
}
used := total - available
if used < 0 {
used = 0
}
return Memory{TotalBytes: total, UsedBytes: used}, nil
}