monitor_server.go 4.1 KB

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