liuxiaolong
2019-11-13 f26a0cab5bca17b7eab57f6330e576271e17a17f
extend/sys/sysinfo.go
@@ -1 +1,59 @@
package sys
import (
   "sort"
   "time"
   "webserver/extend/util"
   "basic.com/valib/gogpu.git"
   "github.com/shirou/gopsutil/cpu"
   "github.com/shirou/gopsutil/disk"
   "github.com/shirou/gopsutil/mem"
)
type SummaryInfo struct {
   Cpu  []float64             `json:"cpu" example:"cpu使用率"`
   Gpu  []gogpu.GpuUnitInfo   `json:"gpu" example:"gpu使用率"`
   Mem  mem.VirtualMemoryStat `json:"mem" example:"内存使用率"`
   Disk disk.UsageStat        `json:"disk" example:"磁盘空间"`
}
const Interval time.Duration = time.Second * 60
var Stat = &SummaryInfo{}
func GatherStat() {
   for range time.Tick(Interval) {
      // Cpu
      if cpuUsedPercent, err := cpu.Percent(time.Second, true); err == nil {
         Stat.Cpu = Stat.Cpu[0:0]
         for _, v := range cpuUsedPercent {
            Stat.Cpu = append(Stat.Cpu, v)
         }
      }
      // Memory
      if meminfo, err := mem.VirtualMemory(); err == nil {
         Stat.Mem = *meminfo
      }
      // Disk
      if disk, err := disk.Usage("/"); err == nil {
         Stat.Disk = *disk
      }
      // Gpu
      if gpuInfo, err := gogpu.Info(); err == nil {
         sort.Sort(gogpu.GPURank(gpuInfo.Info))
         Stat.Gpu = Stat.Gpu[0:0]
         for _, v := range gpuInfo.Info {
            Stat.Gpu = append(Stat.Gpu, v)
         }
      }
   }
}
func GetSysInfo() map[string]interface{} {
   return util.Struct2Map(Stat)
}