record.go 2.1 KB

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