From 5690ccc1b50741d0bfce8339296bda773032fb49 Mon Sep 17 00:00:00 2001 From: mojothemonkey2 <117033380+mojothemonkey2@users.noreply.github.com> Date: Wed, 16 Nov 2022 09:30:19 +0000 Subject: [PATCH] CPU temp support for other platforms (fix #661) (#677) Signed-off-by: link Co-authored-by: link --- CHANGELOG.md | 5 ++++- main.go | 1 + service/system.go | 43 +++++++++++++++++++++++++++++++++++++++---- 3 files changed, 44 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 21c8d5725..f25f9a323 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed + ## [0.3.8-alpha.1] 2022-11-16 ### Added @@ -27,6 +28,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - [System] Improve the feedback function, you can submit feedback in the bottom right corner of WebUI. +### Fixed +- [System] Fix CPU Temp for other platforms ([#661](https://github.com/IceWhaleTech/CasaOS/issues/661)) + ## [0.3.7.1] 2022-11-04 ### Fixed @@ -48,7 +52,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [Apps] App list update mechanism improved, now you can see the latest apps in App Store immediately. - [Storage] Fixed a lot of known issues - ### Added - [Storage] Disk merge (Beta), you can merge multiple disks into a single storage space (currently you need to enable this feature from the command line) diff --git a/main.go b/main.go index 67726a247..a7b1b361d 100644 --- a/main.go +++ b/main.go @@ -56,6 +56,7 @@ func init() { service.Cache = cache.Init() service.GetToken() + service.GetCPUThermalZone() service.NewVersionApp = make(map[string]string) route.InitFunction() diff --git a/service/system.go b/service/system.go index c6d083702..6b1591d55 100644 --- a/service/system.go +++ b/service/system.go @@ -16,6 +16,7 @@ import ( command2 "github.com/IceWhaleTech/CasaOS/pkg/utils/command" "github.com/IceWhaleTech/CasaOS/pkg/utils/common_err" "github.com/IceWhaleTech/CasaOS/pkg/utils/file" + "github.com/IceWhaleTech/CasaOS/pkg/utils/loger" "github.com/shirou/gopsutil/v3/cpu" "github.com/shirou/gopsutil/v3/disk" "github.com/shirou/gopsutil/v3/host" @@ -300,12 +301,46 @@ func (s *systemService) IsServiceRunning(name string) bool { return strings.TrimSpace(status) == "running" } +// find thermal_zone of cpu. +// assertions: +// * thermal_zone "type" and "temp" are required fields +// (https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-class-thermal) +func GetCPUThermalZone() string { + keyName := "cpu_thermal_zone" + + var path string + if result, ok := Cache.Get(keyName); ok { + path, ok = result.(string) + if ok { + return path + } + } + + for i := 0; i < 100; i++ { + path := "/sys/devices/virtual/thermal/thermal_zone" + strconv.Itoa(i) + if _, err := os.Stat(path); !os.IsNotExist(err) { + name := strings.TrimSuffix(string(file.ReadFullFile(path + "/type")), "\n") + cpu_types := []string{"x86_pkg_temp", "cpu", "CPU", "soc"} + for _, s := range cpu_types { + if strings.HasPrefix(name, s) { + loger.Info(fmt.Sprintf("CPU thermal zone found: %s, path: %s.", name, path)) + Cache.SetDefault(keyName, path) + return path + } + } + } else { + loger.Error("CPUThermalZone not found. CPU Temp will not be displayed.") + break + } + } + return "" +} + func (s *systemService) GetCPUTemperature() int { outPut := "" - if file.Exists("/sys/class/thermal/thermal_zone0/temp") { - outPut = string(file.ReadFullFile("/sys/class/thermal/thermal_zone0/temp")) - } else if file.Exists("/sys/class/hwmon/hwmon0/temp1_input") { - outPut = string(file.ReadFullFile("/sys/class/hwmon/hwmon0/temp1_input")) + path := GetCPUThermalZone() + if len(path)>0 { + outPut = string(file.ReadFullFile(path + "/temp")) } else { outPut = "0" }