fix: temperatureStat will stack up (#30)

This commit is contained in:
UUBulb 2024-06-23 22:27:23 +08:00 committed by GitHub
parent 505b7f2210
commit 81b774a7f0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -7,6 +7,7 @@ import (
"runtime" "runtime"
"strconv" "strconv"
"strings" "strings"
"sync"
"sync/atomic" "sync/atomic"
"syscall" "syscall"
"time" "time"
@ -54,6 +55,7 @@ var deviceDataFetchAttempts = map[string]int{
var ( var (
updateGPUStatus int32 updateGPUStatus int32
updateTempStatus int32 updateTempStatus int32
tempWriteLock sync.RWMutex
) )
// GetHost 获取主机硬件信息 // GetHost 获取主机硬件信息
@ -216,7 +218,10 @@ func GetState(agentConfig *model.AgentConfig, skipConnectionCount bool, skipProc
} }
} }
go updateTemplatureStat(&temperatureStat) go updateTemperatureStat()
tempWriteLock.RLock()
defer tempWriteLock.RUnlock()
ret.Temperatures = temperatureStat ret.Temperatures = temperatureStat
go updateGPUStat(agentConfig, &gpuStat) go updateGPUStat(agentConfig, &gpuStat)
@ -330,11 +335,12 @@ func updateGPUStat(agentConfig *model.AgentConfig, gpuStat *uint64) {
} }
} }
func updateTemplatureStat(tempStat *[]model.SensorTemperature) { func updateTemperatureStat() {
if !atomic.CompareAndSwapInt32(&updateTempStatus, 0, 1) { if !atomic.CompareAndSwapInt32(&updateTempStatus, 0, 1) {
return return
} }
defer atomic.StoreInt32(&updateTempStatus, 0) defer atomic.StoreInt32(&updateTempStatus, 0)
if deviceDataFetchAttempts["Temperatures"] <= maxDeviceDataFetchAttempts { if deviceDataFetchAttempts["Temperatures"] <= maxDeviceDataFetchAttempts {
temperatures, err := host.SensorsTemperatures() temperatures, err := host.SensorsTemperatures()
if err != nil { if err != nil {
@ -342,14 +348,19 @@ func updateTemplatureStat(tempStat *[]model.SensorTemperature) {
println("host.SensorsTemperatures error:", err, "attempt:", deviceDataFetchAttempts["Temperatures"]) println("host.SensorsTemperatures error:", err, "attempt:", deviceDataFetchAttempts["Temperatures"])
} else { } else {
deviceDataFetchAttempts["Temperatures"] = 0 deviceDataFetchAttempts["Temperatures"] = 0
tempStat := []model.SensorTemperature{}
for _, t := range temperatures { for _, t := range temperatures {
if t.Temperature > 0 { if t.Temperature > 0 {
*tempStat = append(*tempStat, model.SensorTemperature{ tempStat = append(tempStat, model.SensorTemperature{
Name: t.SensorKey, Name: t.SensorKey,
Temperature: t.Temperature, Temperature: t.Temperature,
}) })
} }
} }
tempWriteLock.Lock()
defer tempWriteLock.Unlock()
temperatureStat = tempStat
} }
} }
} }