collectors.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package main
  2. import (
  3. "log"
  4. "time"
  5. "github.com/cloudfoundry/gosigar"
  6. "github.com/influxdb/influxdb/client"
  7. )
  8. func CollectMemory(schan chan<- serieses, sleepLen time.Duration) {
  9. var (
  10. mem sigar.Mem
  11. swap sigar.Swap
  12. )
  13. serieses := make(serieses, 2)
  14. for {
  15. // ram
  16. checkFatal(mem.Get())
  17. serieses[0] = &client.Series{
  18. Name: "Memory",
  19. Columns: []string{"System", "Total", "Used", "Free", "Cached"},
  20. Points: [][]interface{}{
  21. {name, mem.Total, mem.ActualUsed, mem.ActualFree, mem.ActualFree - mem.Free},
  22. },
  23. }
  24. log.Printf("Mem: total[%12d] used[%12d] free[%12d]\n", mem.Total, mem.Used, mem.Free)
  25. // swap
  26. checkFatal(swap.Get())
  27. serieses[1] = &client.Series{
  28. Name: "Swap",
  29. Columns: []string{"System", "Total", "Used", "Free"},
  30. Points: [][]interface{}{
  31. {name, swap.Total, swap.Used, swap.Free},
  32. },
  33. }
  34. log.Printf("Swap: total[%12d] used[%12d] free[%12d]\n", swap.Total, swap.Used, swap.Free)
  35. schan <- serieses
  36. time.Sleep(sleepLen)
  37. }
  38. }
  39. func CollectDiskSpace(schan chan<- serieses, sleepLen time.Duration, path string) {
  40. var diskspace sigar.FileSystemUsage
  41. for {
  42. checkFatal(diskspace.Get(path))
  43. schan <- serieses{
  44. &client.Series{
  45. Name: "DiskSpace",
  46. Columns: []string{"System", "Total", "Used", "Free"},
  47. Points: [][]interface{}{
  48. {name, diskspace.Total * 1024, diskspace.Used * 1024, diskspace.Free * 1024},
  49. },
  50. },
  51. }
  52. log.Printf("df[%-10s]: %4s %4s %4s %4s\n", path,
  53. formatSize(diskspace.Total),
  54. formatSize(diskspace.Used),
  55. formatSize(diskspace.Avail),
  56. sigar.FormatPercent(diskspace.UsePercent()),
  57. )
  58. time.Sleep(sleepLen)
  59. }
  60. }
  61. func CollectCPULoad(schan chan<- serieses, sleepLen time.Duration) {
  62. var avg sigar.LoadAverage
  63. for {
  64. checkFatal(avg.Get())
  65. schan <- serieses{
  66. &client.Series{
  67. Name: "Load",
  68. Columns: []string{"System", "One", "Five", "Fifteen"},
  69. Points: [][]interface{}{
  70. {name, avg.One, avg.Five, avg.Fifteen},
  71. },
  72. },
  73. }
  74. log.Printf("Load: 1m[%.2f] 5m[%.2f] 15m[%.2f]\n", avg.One, avg.Five, avg.Fifteen)
  75. time.Sleep(sleepLen)
  76. }
  77. }