| | |
| | | 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" |
| | | ) |
| | |
| | | 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 |
| | |
| | | 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() |
| | |
| | | |
| | | 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 |
| | |
| | | apps := dbApi.FindAppMap() |
| | | for k, v := range dbApi.FindAppMap() { |
| | | if v.ProcName != "" { |
| | | installedAppMap[v.ProcName] = apps[k] |
| | | installedAppMap[v.Id] = apps[k] |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 统计正在运行的应用信息 |
| | | 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) |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | 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 |