diff --git a/agent/gpu.go b/agent/gpu.go index b63e56cc..18838d11 100644 --- a/agent/gpu.go +++ b/agent/gpu.go @@ -5,6 +5,7 @@ import ( "bytes" "encoding/json" "fmt" + "maps" "os/exec" "regexp" "strconv" @@ -308,6 +309,9 @@ func (gm *GPUManager) calculateGPUAverage(id string, gpu *system.GPUData, cacheK gpuAvg.Power = twoDecimals(deltaPower / float64(deltaCount)) if gpu.Engines != nil { + // make fresh map for averaged engine metrics to avoid mutating + // the accumulator map stored in gm.GpuDataMap + gpuAvg.Engines = make(map[string]float64, len(gpu.Engines)) gpuAvg.Usage = gm.calculateIntelGPUUsage(&gpuAvg, gpu, lastSnapshot, deltaCount) gpuAvg.PowerPkg = twoDecimals(deltaPowerPkg / float64(deltaCount)) } else { @@ -369,9 +373,7 @@ func (gm *GPUManager) storeSnapshot(id string, gpu *system.GPUData, cacheKey uin } if gpu.Engines != nil { snapshot.engines = make(map[string]float64, len(gpu.Engines)) - for name, value := range gpu.Engines { - snapshot.engines[name] = value - } + maps.Copy(snapshot.engines, gpu.Engines) } gm.lastSnapshots[cacheKey][id] = snapshot } diff --git a/internal/site/src/components/routes/system.tsx b/internal/site/src/components/routes/system.tsx index 1c5d9f17..670f4d0d 100644 --- a/internal/site/src/components/routes/system.tsx +++ b/internal/site/src/components/routes/system.tsx @@ -218,10 +218,12 @@ export default memo(function SystemDetail({ name }: { name: string }) { `rt_metrics`, (data: { container: ContainerStatsRecord[]; info: SystemInfo; stats: SystemStats }) => { // console.log("received realtime metrics", data) - const newContainerData = makeContainerData([ - { created: Date.now(), stats: data.container } as unknown as ContainerStatsRecord, - ]) - setContainerData((prevData) => addEmptyValues(prevData, prevData.slice(-59).concat(newContainerData), 1000)) + if (data.container.length > 0) { + const newContainerData = makeContainerData([ + { created: Date.now(), stats: data.container } as unknown as ContainerStatsRecord, + ]) + setContainerData((prevData) => addEmptyValues(prevData, prevData.slice(-59).concat(newContainerData), 1000)) + } setSystemStats((prevStats) => addEmptyValues( prevStats,