初始化提交
This commit is contained in:
48
mengyamonitor-backend/gpu.go
Normal file
48
mengyamonitor-backend/gpu.go
Normal file
@@ -0,0 +1,48 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"os/exec"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// readGPU 读取GPU信息
|
||||
func readGPU() []GPUMetrics {
|
||||
_, err := exec.LookPath("nvidia-smi")
|
||||
if err != nil {
|
||||
return []GPUMetrics{{Status: "not_available"}}
|
||||
}
|
||||
// Query GPU info including temperature
|
||||
cmd := exec.Command("nvidia-smi", "--query-gpu=name,memory.total,memory.used,utilization.gpu,temperature.gpu", "--format=csv,noheader,nounits")
|
||||
out, err := cmd.Output()
|
||||
if err != nil {
|
||||
return []GPUMetrics{{Status: "error", Name: "nvidia-smi", UtilizationPercent: 0}}
|
||||
}
|
||||
lines := strings.Split(strings.TrimSpace(string(out)), "\n")
|
||||
gpus := make([]GPUMetrics, 0, len(lines))
|
||||
for _, line := range lines {
|
||||
parts := strings.Split(line, ",")
|
||||
for i := range parts {
|
||||
parts[i] = strings.TrimSpace(parts[i])
|
||||
}
|
||||
if len(parts) < 5 {
|
||||
continue
|
||||
}
|
||||
total, _ := strconv.ParseInt(parts[1], 10, 64)
|
||||
used, _ := strconv.ParseInt(parts[2], 10, 64)
|
||||
util, _ := strconv.ParseFloat(parts[3], 64)
|
||||
temp, _ := strconv.ParseFloat(parts[4], 64)
|
||||
gpus = append(gpus, GPUMetrics{
|
||||
Name: parts[0],
|
||||
MemoryTotalMB: total,
|
||||
MemoryUsedMB: used,
|
||||
UtilizationPercent: round(util, 2),
|
||||
Temperature: temp,
|
||||
Status: "ok",
|
||||
})
|
||||
}
|
||||
if len(gpus) == 0 {
|
||||
return []GPUMetrics{{Status: "not_available"}}
|
||||
}
|
||||
return gpus
|
||||
}
|
||||
Reference in New Issue
Block a user