qixiaoning
2025-10-29 9b17a8dcbc1f94eb117a37b3b24ca9dae0d2d588
system-service/sys/sysinfo.go
@@ -1,6 +1,7 @@
package sys
import (
   "errors"
   "fmt"
   "io/ioutil"
   "os"
@@ -12,7 +13,6 @@
   "vamicro/extend/util"
   "basic.com/valib/gogpu.git"
   "basic.com/valib/logger.git"
   "github.com/shirou/gopsutil/cpu"
   "github.com/shirou/gopsutil/disk"
   "github.com/shirou/gopsutil/host"
@@ -81,26 +81,45 @@
   return util.Struct2Map(Stat)
}
func GetGpu(key string) (vGpu []string, err error) {
   resultMsg, e := util.ExeCmd("dlsmi --query-gpu=" + key)
   if e != nil {
      return vGpu, errors.New("无可用GPU!请检查是否正常安显卡及显卡驱动,通过dlsmi查询状态")
   }
   vGpu = strings.Split(string(resultMsg), "\n")
   if len(vGpu) == 0 {
      return vGpu, errors.New("无可用GPU!请检查是否正常安显卡及显卡驱动,通过dlsmi查询状态")
   }
   return vGpu, nil
}
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()
   gpuInfo, err := gogpu.Info()
   var gpuMemTotal int64
   if err == nil {
      for _, gpu := range gpuInfo.Info {
         gpuMemTotal = gpuMemTotal + gpu.GpuMemoryTotal
   var gpuStr string
   //获取型号
   gpuName, _ := GetGpu("name")
   if len(gpuName) > 0 {
      var gpuArr []string = []string{}
      gpuTotal, _ := GetGpu("memory.total")
      for i, name := range gpuName {
         //i>0跳过header
         if i > 0 && len(name) > 0 {
            gpuArr = append(gpuArr, fmt.Sprintf("%s %s", name, gpuTotal[i]))
         }
      }
   } else {
      logger.Debug("gpu error " + err.Error())
      gpuStr = strings.Join(gpuArr, ",")
   }
   gpu := gpuMemTotal
   mem, _ := mem.VirtualMemory()
   host, _ := host.Info()
   return util.Struct2Map(map[string]interface{}{
      "cpu":  cpu,
      "gpu":  gpu,
      "gpu":  gpuStr,
      "mem":  mem,
      "host": host,
      "disk": string(disks),