X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=main.go;h=09ff208b35b07a49132cdf6b6f08ebb538ee895a;hb=24981a733fa25c3a7aa604cbecb4b94e385f80d6;hp=56f08d927d531b8da4a6dac8aa4b8e3feddaad75;hpb=194b9deee96d2a2238f6908bd2baf19610a024c5;p=godwmstat.git diff --git a/main.go b/main.go index 56f08d9..09ff208 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( - strings.Join([]string{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 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[iface] = fmt.Sprintf( + "%s:%s/%s", + iface, 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") + go netstat("ix0") var now time.Time var status string var cmd *exec.Cmd for { now = time.Now() + NetM.RLock() status = fmt.Sprintf( - "[%s] [%s] [CPU %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["bridge0"], Net["ix0"], 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()