sys_monitor.go 3.9 KB

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