X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=main.go;h=20b4d350014c95b1e8fe77d55fa008da4158fc6b;hb=HEAD;hp=50ede58eb7c76ac1d14c65f982f5ebc2d59f6e9c;hpb=2be598a2af05f57ddf1e9125cf1224cfa20a280a;p=godwmstat.git diff --git a/main.go b/main.go index 50ede58..20b4d35 100644 --- a/main.go +++ b/main.go @@ -9,6 +9,7 @@ import ( "os/exec" "strconv" "strings" + "sync" "time" "github.com/dustin/go-humanize" @@ -17,12 +18,14 @@ import ( var ( MyPID string = strconv.Itoa(os.Getpid()) CPU string = "?" + Freq string = "?" Mem string = "?" ARC string = "?" - Swap string = "?" + Swap string = "" Flags string = "?" IOs string = "?" - Net string = "?" + Net = map[string]string{} + NetM sync.RWMutex ) func piper(c chan []string, name string, args ...string) error { @@ -42,12 +45,9 @@ func piper(c chan []string, name string, args ...string) error { c <- cols } } - if err = scanner.Err(); err != nil { - cmd.Process.Kill() - cmd.Wait() - return err - } - return nil + cmd.Process.Kill() + cmd.Wait() + return scanner.Err() } func bg(cmd string, args ...string) chan []string { @@ -68,10 +68,10 @@ func top() { for cols := range bg("top", "-b", "-d", "infinity", "-p", MyPID, "-s", "5", "infinity") { switch cols[0] { case "CPU:": - CPU = strings.ReplaceAll( - fmt.Sprintf("%s sys:%s int:%s", cols[1], cols[5], cols[7]), - "%", "", - ) + CPU = strings.ReplaceAll(fmt.Sprintf( + "%s sys:%s int:%s n:%s", + cols[1], cols[5], cols[7], cols[3], + ), "%", "") case "Mem:": Mem = strings.ReplaceAll(strings.Join(cols[1:], " "), ",", "") case "ARC:": @@ -79,8 +79,6 @@ func top() { case "Swap:": if len(cols) >= 5 && cols[4] == "Used," { Swap = cols[3] + " Swap " - } else { - Swap = "" } } } @@ -101,8 +99,8 @@ func iostat() { } } -func netstat() { - for cols := range bg("netstat", "-I", "bridge0", "-n", "1") { +func netstat(iface, short string) { + for cols := range bg("netstat", "-I", iface, "-n", "1") { if _, err := strconv.Atoi(cols[0]); err != nil { continue } @@ -114,12 +112,30 @@ func netstat() { if err != nil { continue } - Net = fmt.Sprintf( - "%s/%s %s / %s", - cols[0], cols[4], + _ = cols[0] // pkts rx + _ = cols[4] // pkts tx + NetM.Lock() + Net[short] = fmt.Sprintf( + "%s:%s/%s", + short, humanize.IBytes(uint64(ibps)), humanize.IBytes(uint64(obps)), ) + NetM.Unlock() + } +} + +func freq() { + for cols := range bg("sysctl", "-n", "dev.cpu.0.freq") { + if strings.HasSuffix(cols[0], "01") { + Freq = "TB" + } else { + raw, err := strconv.Atoi(cols[0]) + if err != nil { + continue + } + Freq = fmt.Sprintf("%.1fG", float64(raw)/1000) + } } } @@ -146,18 +162,22 @@ func main() { } }() go top() + go freq() go iostat() - go netstat() + go netstat("bridge0", "br") + go netstat("ix0", "ix") var now time.Time var status string var cmd *exec.Cmd for { now = time.Now() + NetM.RLock() status = fmt.Sprintf( - "[%s] [%s] [%s] [%s%s %s ARC] [%s] %s", - IOs, Net, CPU, Swap, Mem, ARC, Flags, + "[%s] [%s %s] [%s %s] [%s%s %s ARC] [%s] %s", + IOs, Net["br"], Net["ix"], CPU, Freq, Swap, Mem, ARC, Flags, now.Format("2006-01-02 15:04:05"), ) + NetM.RUnlock() if *xsetroot { cmd = exec.Command("xsetroot", "-name", status) cmd.Run()