main.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package main
  2. import (
  3. "bufio"
  4. "flag"
  5. "fmt"
  6. "github.com/oz123/gupta"
  7. "log"
  8. "os"
  9. "time"
  10. )
  11. func readFirstLine(rd *bufio.Reader, f *os.File) string {
  12. line, err := rd.ReadString('\n')
  13. if err != nil {
  14. log.Fatalf("could not read /proc/stat, error: %v", err)
  15. }
  16. rd.Reset(f)
  17. f.Seek(0, 0)
  18. return line
  19. }
  20. func readProcStatLines(freq int) (string, string) {
  21. var line, newline string
  22. f, err := os.Open("/proc/stat")
  23. if err != nil {
  24. log.Fatalf("could not read /proc/stat, error: %v", err)
  25. }
  26. defer f.Close()
  27. rd := bufio.NewReader(f)
  28. line = readFirstLine(rd, f)
  29. time.Sleep(time.Duration(freq) * time.Second)
  30. newline = readFirstLine(rd, f)
  31. return line, newline
  32. }
  33. func main() {
  34. var freq int
  35. var partition, netInterface string
  36. var load, memory, cpu bool
  37. flag.IntVar(&freq, "frequency", 5, "Frequency of polling in secods")
  38. flag.IntVar(&freq, "f", 5, "Frequency of polling in secods")
  39. flag.BoolVar(&memory, "m", false, "Poll memory")
  40. flag.BoolVar(&load, "l", false, "Poll load")
  41. flag.BoolVar(&cpu, "c", false, "poll CPU usage")
  42. flag.StringVar(&partition, "p", "", "Poll disk usage (partition)")
  43. flag.StringVar(&netInterface, "n", "", "Network usage (interface)")
  44. flag.Parse()
  45. fmt.Println(gupta.Hello())
  46. for true {
  47. line, lineNew := readProcStatLines(freq)
  48. cpustat := gupta.NewCPUStat(line, lineNew)
  49. fmt.Printf("CPU usage %.2f%%\n", cpustat.CPUUsage())
  50. }
  51. }