sys_monitor.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. package controller
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/gogf/gf/v2/os/gtime"
  6. "github.com/gogf/gf/v2/util/gconv"
  7. "github.com/shirou/gopsutil/cpu"
  8. "github.com/shirou/gopsutil/disk"
  9. "github.com/shirou/gopsutil/host"
  10. "github.com/shirou/gopsutil/load"
  11. "github.com/shirou/gopsutil/mem"
  12. "github.com/tiger1103/gfast/v3/api/v1/system"
  13. "github.com/tiger1103/gfast/v3/library/libUtils"
  14. "os"
  15. "runtime"
  16. "strconv"
  17. "time"
  18. )
  19. var Monitor = sysMonitorController{
  20. startTime: gtime.Now(),
  21. }
  22. type sysMonitorController struct {
  23. BaseController
  24. startTime *gtime.Time
  25. }
  26. func (c *sysMonitorController) List(ctx context.Context, req *system.MonitorSearchReq) (res *system.MonitorSearchRes, err error) {
  27. cpuNum := runtime.NumCPU() //核心数
  28. var cpuUsed float64 = 0 //用户使用率
  29. var cpuAvg5 float64 = 0 //CPU负载5
  30. var cpuAvg15 float64 = 0 //当前空闲率
  31. cpuInfo, err := cpu.Percent(time.Duration(time.Second), false)
  32. if err == nil {
  33. cpuUsed, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", cpuInfo[0]), 64)
  34. }
  35. loadInfo, err := load.Avg()
  36. if err == nil {
  37. cpuAvg5, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", loadInfo.Load5), 64)
  38. cpuAvg15, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", loadInfo.Load5), 64)
  39. }
  40. var memTotal uint64 = 0 //总内存
  41. var memUsed uint64 = 0 //总内存 := 0 //已用内存
  42. var memFree uint64 = 0 //剩余内存
  43. var memUsage float64 = 0 //使用率
  44. v, err := mem.VirtualMemory()
  45. if err == nil {
  46. memTotal = v.Total
  47. memUsed = v.Used
  48. memFree = memTotal - memUsed
  49. memUsage, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", v.UsedPercent), 64)
  50. }
  51. var goTotal uint64 = 0 //go分配的总内存数
  52. var goUsed uint64 = 0 //go使用的内存数
  53. var goFree uint64 = 0 //go剩余的内存数
  54. var goUsage float64 = 0 //使用率
  55. var gomem runtime.MemStats
  56. runtime.ReadMemStats(&gomem)
  57. goUsed = gomem.Sys
  58. goUsage = gconv.Float64(fmt.Sprintf("%.2f", gconv.Float64(goUsed)/gconv.Float64(memTotal)*100))
  59. sysComputerIp := "" //服务器IP
  60. ip, err := libUtils.GetLocalIP()
  61. if err == nil {
  62. sysComputerIp = ip
  63. }
  64. sysComputerName := "" //服务器名称
  65. sysOsName := "" //操作系统
  66. sysOsArch := "" //系统架构
  67. sysInfo, err := host.Info()
  68. if err == nil {
  69. sysComputerName = sysInfo.Hostname
  70. sysOsName = sysInfo.OS
  71. sysOsArch = sysInfo.KernelArch
  72. }
  73. goName := "GoLang" //语言环境
  74. goVersion := runtime.Version() //版本
  75. gtime.Date()
  76. goStartTime := c.startTime //启动时间
  77. goRunTime := gtime.Now().Timestamp() - c.startTime.Timestamp() //运行时长(秒)
  78. goHome := runtime.GOROOT() //安装路径
  79. goUserDir := "" //项目路径
  80. curDir, err := os.Getwd()
  81. if err == nil {
  82. goUserDir = curDir
  83. }
  84. //服务器磁盘信息
  85. diskList := make([]disk.UsageStat, 0)
  86. diskInfo, err := disk.Partitions(true) //所有分区
  87. if err == nil {
  88. for _, p := range diskInfo {
  89. diskDetail, err := disk.Usage(p.Mountpoint)
  90. if err == nil {
  91. diskDetail.UsedPercent, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", diskDetail.UsedPercent), 64)
  92. diskList = append(diskList, *diskDetail)
  93. }
  94. }
  95. }
  96. res = new(system.MonitorSearchRes)
  97. res = &system.MonitorSearchRes{
  98. "cpuNum": cpuNum,
  99. "cpuUsed": cpuUsed,
  100. "cpuAvg5": gconv.String(cpuAvg5),
  101. "cpuAvg15": gconv.String(cpuAvg15),
  102. "memTotal": memTotal,
  103. "goTotal": goTotal,
  104. "memUsed": memUsed,
  105. "goUsed": goUsed,
  106. "memFree": memFree,
  107. "goFree": goFree,
  108. "memUsage": memUsage,
  109. "goUsage": goUsage,
  110. "sysComputerName": sysComputerName,
  111. "sysOsName": sysOsName,
  112. "sysComputerIp": sysComputerIp,
  113. "sysOsArch": sysOsArch,
  114. "goName": goName,
  115. "goVersion": goVersion,
  116. "goStartTime": goStartTime,
  117. "goRunTime": goRunTime,
  118. "goHome": goHome,
  119. "goUserDir": goUserDir,
  120. "diskList": diskList,
  121. }
  122. return
  123. }