record.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package analytic
  2. import (
  3. "github.com/uozi-tech/cosy/logger"
  4. "github.com/shirou/gopsutil/v3/cpu"
  5. "github.com/shirou/gopsutil/v3/disk"
  6. "github.com/shirou/gopsutil/v3/net"
  7. "runtime"
  8. "time"
  9. )
  10. func getTotalDiskIO() (read, write uint64) {
  11. diskIOCounters, err := disk.IOCounters()
  12. if err != nil {
  13. logger.Error(err.Error())
  14. return
  15. }
  16. for _, v := range diskIOCounters {
  17. write += v.WriteCount
  18. read += v.ReadCount
  19. }
  20. return
  21. }
  22. func recordCpu(now time.Time) {
  23. cpuTimesBefore, err := cpu.Times(false)
  24. if err != nil {
  25. logger.Error(err.Error())
  26. return
  27. }
  28. time.Sleep(1000 * time.Millisecond)
  29. cpuTimesAfter, err := cpu.Times(false)
  30. if err != nil {
  31. logger.Error(err.Error())
  32. return
  33. }
  34. threadNum := runtime.GOMAXPROCS(0)
  35. cpuUserUsage := (cpuTimesAfter[0].User - cpuTimesBefore[0].User) / (float64(1000*threadNum) / 1000)
  36. cpuUserUsage *= 100
  37. cpuSystemUsage := (cpuTimesAfter[0].System - cpuTimesBefore[0].System) / (float64(1000*threadNum) / 1000)
  38. cpuSystemUsage *= 100
  39. u := Usage[float64]{
  40. Time: now,
  41. Usage: cpuUserUsage,
  42. }
  43. CpuUserRecord = append(CpuUserRecord, u)
  44. s := Usage[float64]{
  45. Time: now,
  46. Usage: cpuUserUsage + cpuSystemUsage,
  47. }
  48. CpuTotalRecord = append(CpuTotalRecord, s)
  49. if len(CpuUserRecord) > 100 {
  50. CpuUserRecord = CpuUserRecord[1:]
  51. }
  52. if len(CpuTotalRecord) > 100 {
  53. CpuTotalRecord = CpuTotalRecord[1:]
  54. }
  55. }
  56. func recordNetwork(now time.Time) {
  57. network, err := net.IOCounters(false)
  58. if err != nil {
  59. logger.Error(err.Error())
  60. return
  61. }
  62. if len(network) == 0 {
  63. return
  64. }
  65. NetRecvRecord = append(NetRecvRecord, Usage[uint64]{
  66. Time: now,
  67. Usage: network[0].BytesRecv - LastNetRecv,
  68. })
  69. NetSentRecord = append(NetSentRecord, Usage[uint64]{
  70. Time: now,
  71. Usage: network[0].BytesSent - LastNetSent,
  72. })
  73. LastNetRecv = network[0].BytesRecv
  74. LastNetSent = network[0].BytesSent
  75. if len(NetRecvRecord) > 100 {
  76. NetRecvRecord = NetRecvRecord[1:]
  77. }
  78. if len(NetSentRecord) > 100 {
  79. NetSentRecord = NetSentRecord[1:]
  80. }
  81. }
  82. func recordDiskIO(now time.Time) {
  83. readCount, writeCount := getTotalDiskIO()
  84. DiskReadRecord = append(DiskReadRecord, Usage[uint64]{
  85. Time: now,
  86. Usage: readCount - LastDiskReads,
  87. })
  88. DiskWriteRecord = append(DiskWriteRecord, Usage[uint64]{
  89. Time: now,
  90. Usage: writeCount - LastDiskWrites,
  91. })
  92. if len(DiskReadRecord) > 100 {
  93. DiskReadRecord = DiskReadRecord[1:]
  94. }
  95. if len(DiskWriteRecord) > 100 {
  96. DiskWriteRecord = DiskWriteRecord[1:]
  97. }
  98. LastDiskWrites = writeCount
  99. LastDiskReads = readCount
  100. }