package lib import ( "bufio" "log" "os" "strconv" "time" ) // UpdateCPUTemperature gets and updates average CPU cores temperature. func (c *MyConfig) UpdateCPUTemperature() { var ( n = len(c.CPUTemp.File) InitialDelay = 100 * time.Millisecond LoopIterationDelay = 3 * time.Second Delay = InitialDelay ticker = time.NewTicker(Delay) ) for range ticker.C { var ( temperature = make([]int64, n) tSum int64 tAvg int64 validCount int ) if Delay == InitialDelay { Delay = LoopIterationDelay ticker.Reset(Delay) } for i, filename := range c.CPUTemp.File { file, err := os.Open(filename) if err != nil { log.Printf("Unable to open %s: %s", filename, err) continue } defer file.Close() reader := bufio.NewReader(file) line, _, err := reader.ReadLine() if err != nil { log.Printf("Unable to read from %s: %s", filename, err) continue } temp, err := strconv.ParseInt(string(line), 10, 32) if err != nil { log.Printf("Unable to convert string to number from file %s: %s", filename, err) continue } if temp > 1000 { temp /= 1000 } temperature[i] = temp validCount++ } if validCount == 0 { continue } if validCount == 1 { for _, t := range temperature { if t != 0 { tAvg = t break } } } else { for _, t := range temperature { tSum += t } tAvg = tSum / int64(validCount) } if c.Values.CPUTemperature != tAvg { c.Values.CPUTemperature = tAvg c.Channels.UpdateReady <- true } } } /* vim: set ft=go noet ai ts=4 sw=4 sts=4: */