package status // import "hhvn.uk/hbspbar/status" import ( "fmt" "strings" "hhvn.uk/hbspbar/common" ) func checkMemField(m map[string]int, k string) error { _, ok := m[k] if !ok { return fmt.Errorf("missing %s", k) } return nil } func mem(name string) error { u := newUpdate(name) mem := make(map[string]int) lines, err := common.FileAsLines("/proc/meminfo") if err != nil { return err } for _, l := range lines { name, rest, _ := strings.Cut(l, ":") val := strings.TrimLeft(strings.TrimSuffix(rest, " kB"), " ") n, err := common.Intify(val) if err != nil { return err } mem[name] = n } if err := checkMemField(mem, "MemTotal"); err != nil { return err } if err := checkMemField(mem, "MemAvailable"); err != nil { return err } total := mem["MemTotal"] used := total - mem["MemAvailable"] p := int(float64(used) / float64(total) * 100.0) cx := 0 cx += u.drawPercentBar(cx, p) _, err = u.drawText(cx, blendGYR(p), fmt.Sprintf("%d%%", p)) updates <- u sleep(1) return nil } func init() { register("mem", mem) }