mirror of
https://github.com/henrygd/beszel.git
synced 2026-03-22 13:36:16 +01:00
54 lines
1.2 KiB
Go
54 lines
1.2 KiB
Go
package agent
|
|
|
|
import (
|
|
"encoding/json"
|
|
"log/slog"
|
|
|
|
"github.com/henrygd/beszel/internal/entities/system"
|
|
)
|
|
|
|
const (
|
|
intelGpuStatsCmd string = "intel_gpu_top"
|
|
intelGpuStatsInterval string = "3800" // in milliseconds
|
|
)
|
|
|
|
type intelGpuStats struct {
|
|
Power struct {
|
|
GPU float64 `json:"gpu"`
|
|
} `json:"power"`
|
|
Engines map[string]struct {
|
|
Busy float64 `json:"busy"`
|
|
} `json:"engines"`
|
|
}
|
|
|
|
func (gm *GPUManager) parseIntelData(output []byte) bool {
|
|
slog.Info("Parsing Intel GPU stats")
|
|
var intelGpuStats intelGpuStats
|
|
if err := json.Unmarshal(output, &intelGpuStats); err != nil {
|
|
slog.Error("Error parsing Intel GPU stats", "err", err)
|
|
return false
|
|
}
|
|
gm.Lock()
|
|
defer gm.Unlock()
|
|
|
|
// only one gpu for now - cmd doesn't provide all by default
|
|
gpuData, ok := gm.GpuDataMap["0"]
|
|
if !ok {
|
|
gpuData = &system.GPUData{Name: "GPU", Engines: make(map[string]float64, len(intelGpuStats.Engines))}
|
|
gm.GpuDataMap["0"] = gpuData
|
|
}
|
|
|
|
if intelGpuStats.Power.GPU > 0 {
|
|
gpuData.Power += intelGpuStats.Power.GPU
|
|
}
|
|
|
|
for name, engine := range intelGpuStats.Engines {
|
|
gpuData.Engines[name] += engine.Busy
|
|
}
|
|
|
|
gpuData.Count++
|
|
|
|
slog.Info("GPU Data", "gpuData", gpuData)
|
|
return true
|
|
}
|