Ver código fonte

CPU temp support for other platforms (fix #661) (#677)

Signed-off-by: link <a624669980@163.com>
Co-authored-by: link <a624669980@163.com>
mojothemonkey2 2 anos atrás
pai
commit
5690ccc1b5
3 arquivos alterados com 44 adições e 5 exclusões
  1. 4 1
      CHANGELOG.md
  2. 1 0
      main.go
  3. 39 4
      service/system.go

+ 4 - 1
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)
 

+ 1 - 0
main.go

@@ -56,6 +56,7 @@ func init() {
 	service.Cache = cache.Init()
 
 	service.GetToken()
+	service.GetCPUThermalZone()
 
 	service.NewVersionApp = make(map[string]string)
 	route.InitFunction()

+ 39 - 4
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"
 	}