hardware.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package metrics
  2. import (
  3. "time"
  4. "github.com/shirou/gopsutil/v3/cpu"
  5. "github.com/shirou/gopsutil/v3/disk"
  6. "github.com/shirou/gopsutil/v3/mem"
  7. log "github.com/sirupsen/logrus"
  8. )
  9. // Max number of metrics we want to keep.
  10. const maxCollectionValues = 300
  11. func collectCPUUtilization() {
  12. if len(metrics.CPUUtilizations) > maxCollectionValues {
  13. metrics.CPUUtilizations = metrics.CPUUtilizations[1:]
  14. }
  15. v, err := cpu.Percent(0, false)
  16. if err != nil {
  17. log.Errorln(err)
  18. return
  19. }
  20. // Default to zero but try to use the cumulative values of all the CPUs
  21. // if values exist.
  22. value := 0.0
  23. if len(v) > 0 {
  24. value = v[0]
  25. }
  26. metricValue := TimestampedValue{time.Now(), value}
  27. metrics.CPUUtilizations = append(metrics.CPUUtilizations, metricValue)
  28. cpuUsage.Set(metricValue.Value)
  29. }
  30. func collectRAMUtilization() {
  31. if len(metrics.RAMUtilizations) > maxCollectionValues {
  32. metrics.RAMUtilizations = metrics.RAMUtilizations[1:]
  33. }
  34. memoryUsage, _ := mem.VirtualMemory()
  35. metricValue := TimestampedValue{time.Now(), memoryUsage.UsedPercent}
  36. metrics.RAMUtilizations = append(metrics.RAMUtilizations, metricValue)
  37. }
  38. func collectDiskUtilization() {
  39. path := "./"
  40. diskUse, _ := disk.Usage(path)
  41. if len(metrics.DiskUtilizations) > maxCollectionValues {
  42. metrics.DiskUtilizations = metrics.DiskUtilizations[1:]
  43. }
  44. metricValue := TimestampedValue{time.Now(), diskUse.UsedPercent}
  45. metrics.DiskUtilizations = append(metrics.DiskUtilizations, metricValue)
  46. }