package sys
|
|
import (
|
"fmt"
|
"os"
|
"os/exec"
|
"sort"
|
"time"
|
"vamicro/extend/util"
|
|
"basic.com/valib/gogpu.git"
|
|
"github.com/shirou/gopsutil/cpu"
|
"github.com/shirou/gopsutil/disk"
|
"github.com/shirou/gopsutil/host"
|
"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
|
agxGpuProcIface := "/sys/devices/gpu.0/load"
|
|
if util.Exists(agxGpuProcIface) {
|
fd, err1 := os.Open(agxGpuProcIface)
|
if err1 == nil {
|
var load int64
|
fmt.Fscanf(fd, "%d", &load)
|
// 模拟nvidia库的输出
|
Stat.Gpu = append(Stat.Gpu, gogpu.GpuUnitInfo{
|
GpuMemoryTotal: 1000,
|
GpuMemoryUsed: load,
|
})
|
fd.Close()
|
}
|
} else {
|
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)
|
}
|
|
func GetDeviceInfo() map[string]interface{} {
|
cmd := exec.Command("/bin/sh", "-c", "lsblk -d | grep -v part | grep -v SWAP | grep -v M | grep disk | awk '{printf $4\" \"}'")
|
disks, _ := cmd.Output()
|
cpu, _ := cpu.Info()
|
mem, _ := mem.VirtualMemory()
|
host, _ := host.Info()
|
|
return util.Struct2Map(map[string]interface{}{
|
"cpu": cpu,
|
"mem": mem,
|
"host": host,
|
"disk": string(disks),
|
})
|
}
|