| | |
| | | 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), |
| | | }) |
| | | } |
| | | 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),
|
| | | })
|
| | | }
|