diff --git a/index.html b/index.html index 677efe7..fab1dde 100644 --- a/index.html +++ b/index.html @@ -10,9 +10,15 @@

Millics

-

- This is kindof running maybe probs and has kindof no - functionality yet. -

+ + + + + + + + + +
CPU{{.CpuUsage}} %
sysLoad{{.SysLoad}}
diff --git a/main.go b/main.go index b9283d6..7f5ea37 100644 --- a/main.go +++ b/main.go @@ -19,10 +19,14 @@ type Config struct { type page struct { Title string + SysLoad string + CpuUsage string } var db *sql.DB +var cpuUsage int8 +var sysLoad float32 func main() { var err error @@ -58,7 +62,9 @@ func main() { case <-done: return case t := <-tickerLAvgMin.C: + fmt.Printf("%v\n", t) fetchLoadMinutely(t) + fetchCpuMinutely(t) } } }() @@ -79,6 +85,8 @@ func httpRootHandler(w http.ResponseWriter, r *http.Request) { t, _ := template.ParseFiles("index.html") var p page p.Title = "Millics" + p.SysLoad = fmt.Sprint(sysLoad) + p.CpuUsage = fmt.Sprint(cpuUsage) t.Execute(w, p) } @@ -87,7 +95,7 @@ func initDB() { return } -func fetchLoadMinutely(t time.Time) { +func fetchLoadMinutely(_t time.Time) { file, err := os.Open("/proc/loadavg") if err != nil { fmt.Printf("Error fetching load: %v\n", err) @@ -101,7 +109,35 @@ func fetchLoadMinutely(t time.Time) { fmt.Printf("Can't parse /proc/loadavg: %v\n", err) return } - - fmt.Printf("sysLoad %v: %v/%v/%v\n", t, lavg1, lavg5, lavg15) + + sysLoad = lavg1 + fmt.Printf("sysLoad: %v/%v/%v\n", lavg1, lavg5, lavg15) return } + +var lastCpuTotal, lastCpuTotalIdle uint64 = 0, 0 +func fetchCpuMinutely(_t time.Time) { + file, err := os.Open("/proc/stat") + if err != nil { + fmt.Printf("Error fetching CPU usage: %v\n", err) + return + } + defer file.Close() + + var cpuUser, cpuNice, cpuSystem, cpuIdle, cpuIOWait, cpuIRQ, cpuSoftIRQ, cpuSteal uint64 + var cpu string + ret, err := fmt.Fscanf(file, "%s %d %d %d %d %d %d %d %d", &cpu, &cpuUser, &cpuNice, &cpuSystem, &cpuIdle, &cpuIOWait, &cpuIRQ, &cpuSoftIRQ, &cpuSteal) + if err != nil || cpu != "cpu" || ret < 9 { + fmt.Printf("Can't parse /proc/stat: %v\n", err) + return + } + + cpuTotal := cpuUser + cpuNice + cpuSystem + cpuIdle + cpuIOWait + cpuIRQ + cpuSoftIRQ + cpuSteal + cpuTotalIdle := cpuIdle + cpuIOWait + if lastCpuTotal != 0 && lastCpuTotalIdle != 0 { + cpuUsage = int8(100-float32((cpuTotalIdle-lastCpuTotalIdle))/float32((cpuTotal-lastCpuTotal))*100) + fmt.Printf("CPU: %v %%\n", cpuUsage) + } + lastCpuTotal = cpuTotal + lastCpuTotalIdle = cpuTotalIdle +}