qixiaoning
2025-10-29 9b17a8dcbc1f94eb117a37b3b24ca9dae0d2d588
sysinfo-service/service/proc.go
@@ -1,11 +1,11 @@
package service
import (
   "basic.com/pubsub/protomsg.git"
   "basic.com/valib/bhomedbapi.git"
   "regexp"
   "strings"
   "vamicro/sysinfo-service/models/gogpu"
   "basic.com/pubsub/protomsg.git"
   "basic.com/valib/bhomedbapi.git"
   "github.com/shirou/gopsutil/process"
)
@@ -13,21 +13,30 @@
const ProcName = "sysinfo-service"
var BasicProc = map[string]string{
   "analysis":      "算法处理单元",
   "apiserver":     "basic接口服务",
   "decoder":       "视频解码服务",
   "elasticsearch": "分布式数据搜索引擎",
   "faceDetect":    "人脸识别服务",
   "file-service":  "文件服务",
   "pollcontrol":   "轮询管理",
   "ruleServer":    "规则处理单元",
   "dataProcess":   "规则处理单元",
   "schedule":      "调度进程",
   "sdkCompare":    "人脸比对服务",
   "sshd":          "ssh服务端",
   "videopublish":  "实时视频推流服务",
   "videosvr.out":  "国标上级服务",
   "weed":          "分布式文件系统",
   // "analysis":      "算法处理单元",
   "apiserver": "basic接口服务",
   "decoder":   "视频解码服务",
   // "elasticsearch": "分布式数据搜索引擎",
   // "faceDetect":    "人脸识别服务",
   "file-service": "文件服务",
   // "pollcontrol":  "轮询管理",
   "pushServer": "规则处理单元",
   // "dataProcess":   "规则处理单元",
   "schedule": "调度进程",
   // "sdkCompare":    "人脸比对服务",
   "sshd":       "ssh服务端",
   "zlmediaKit": "实时视频推流服务",
   "wvp":        "国标上级服务",
   "weed":       "分布式文件系统",
}
var ModleProc = map[string]string{
   "python smart_detect.py":          "目标检测模型",
   "/usr/bin/python smart_detect.py": "目标检测模型",
   "python qwen_detect.py":           "图片解析模型",
   "/usr/bin/python qwen_detect.py":  "图片解析模型",
   "python app.py":                   "对话检索模型",
   "/usr/bin/python app.py":          "对话检索模型",
}
type UsedMap map[int]int64
@@ -51,10 +60,9 @@
   Net  int32   `json:"net"`
}
func CollectAlgoProcess() []Proc {
   var procs []Proc
func CollectAlgoProcess() (rsp []Proc) {
   var gpuMemTotal int64
   var re = regexp.MustCompile(`-sdk=(\S+)`)
   // 统计gpu
   gpuPer := UsedMap{}
   gpuInfo, err := gogpu.Info()
@@ -74,34 +82,84 @@
   ps, _ := process.Processes()
   // 统计算法信息
   for _, p := range ps {
      if name, err := p.Name(); err == nil {
         if name == "analysis" {
            cmdLine, _ := p.Cmdline()
            if len(cmdLine) > 0 {
               match := re.FindAllStringSubmatch(cmdLine, -1)
               if len(match) > 0 && len(match[0]) > 1 {
                  proc := Proc{
                     Name: match[0][1],
                     Pid:  p.Pid,
                     Desc: match[0][1],
                  }
      for k, v := range ModleProc {
         if name, err := p.Cmdline(); err == nil {
                  proc.Cpu, _ = p.CPUPercent()
                  proc.Mem, _ = p.MemoryPercent()
                  proc.Gpu = gpuPer.Get(int(p.Pid))
                  procs = append(procs, proc)
            if name == k {
               proc := Proc{
                  Name: k,
                  Desc: v,
                  Cpu:  0,
                  Mem:  0,
                  Gpu:  0,
               }
               proc.Pid = p.Pid
               proc.Cpu, _ = p.CPUPercent()
               proc.Mem, _ = p.MemoryPercent()
               proc.Gpu = gpuPer.Get(int(p.Pid))
               rsp = append(rsp, proc)
            }
         }
      }
   }
   return procs
   return
}
// func CollectAlgoProcess() []Proc {
//    var procs []Proc
//    var gpuMemTotal int64
//    var re = regexp.MustCompile(`-sdk=(\S+)`)
//    gpuPer := UsedMap{}
//    gpuInfo, err := gogpu.Info()
//    if err == nil {
//       for _, gpu := range gpuInfo.Info {
//          gpuMemTotal = gpuMemTotal + gpu.GpuMemoryTotal
//       }
//       for _, proc := range gpuInfo.Processes {
//          if _, ok := gpuPer[proc.Pid]; ok {
//             gpuPer[proc.Pid] = gpuPer[proc.Pid] + int64(proc.UsedMem)
//          } else {
//             gpuPer[proc.Pid] = int64(proc.UsedMem)
//          }
//       }
//    }
//    ps, _ := process.Processes()
//    // 统计算法信息
//    for _, p := range ps {
//       if name, err := p.Name(); err == nil {
//          if name == "analysis" {
//             cmdLine, _ := p.Cmdline()
//             if len(cmdLine) > 0 {
//                match := re.FindAllStringSubmatch(cmdLine, -1)
//                if len(match) > 0 && len(match[0]) > 1 {
//                   proc := Proc{
//                      Name: match[0][1],
//                      Pid:  p.Pid,
//                      Desc: match[0][1],
//                   }
//                   proc.Cpu, _ = p.CPUPercent()
//                   proc.Mem, _ = p.MemoryPercent()
//                   proc.Gpu = gpuPer.Get(int(p.Pid))
//                   procs = append(procs, proc)
//                }
//             }
//          }
//       }
//    }
//    return procs
// }
func CollectAppProcess() []Proc {
   var procs []Proc
@@ -114,7 +172,7 @@
   apps := dbApi.FindAppMap()
   for k, v := range dbApi.FindAppMap() {
      if v.ProcName != "" {
         installedAppMap[v.ProcName] = apps[k]
         installedAppMap[v.Id] = apps[k]
      }
   }
@@ -135,40 +193,27 @@
         }
      }
   }
   // 统计正在运行的应用信息
   ps, _ := process.Processes()
   for _, p := range ps {
      if name, err := p.Name(); err == nil {
         if app, isExist := installedAppMap[name]; isExist {
            proc := Proc{
               Name: app.Name,
               Pid:  p.Pid,
               Desc: app.Title,
            }
            proc.Cpu, _ = p.CPUPercent()
            proc.Mem, _ = p.MemoryPercent()
            proc.Gpu = gpuPer.Get(int(p.Pid))
            procs = append(procs, proc)
            delete(installedAppMap, name)
         }
      }
   }
   // 追加未启动的应用
   for _, v := range installedAppMap {
      proc := Proc{
         Name: v.Name,
         Pid:  0,
         Desc: v.Title,
      }
      proc.Cpu = 0
      proc.Mem = 0
      proc.Gpu = 0
      for _, p := range ps {
         if name, err := p.Name(); err == nil {
            if name == v.ProcName {
               proc.Pid = p.Pid
               proc.Cpu, _ = p.CPUPercent()
               proc.Mem, _ = p.MemoryPercent()
               proc.Gpu = gpuPer.Get(int(p.Pid))
            }
         }
      }
      procs = append(procs, proc)
   }
@@ -194,7 +239,15 @@
            }
         }
         if k == "elasticsearch" {
         if k == "zlmediaKit" {
            cmdLine, _ := p.Cmdline()
            if strings.Contains(cmdLine, "MediaServer") {
               proc.Pid = p.Pid
               break
            }
         }
         if k == "wvp" {
            cmdLine, _ := p.Cmdline()
            if strings.Contains(cmdLine, k) {
               proc.Pid = p.Pid