...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package sysfs
18
19 import (
20 "errors"
21 "os"
22 "path/filepath"
23 "strings"
24 "syscall"
25
26 "github.com/prometheus/procfs/internal/util"
27 )
28
29
30
31
32 type ClassThermalZoneStats struct {
33 Name string
34 Type string
35 Temp int64
36 Policy string
37 Mode *bool
38 Passive *uint64
39 }
40
41
42 func (fs FS) ClassThermalZoneStats() ([]ClassThermalZoneStats, error) {
43 zones, err := filepath.Glob(fs.sys.Path("class/thermal/thermal_zone[0-9]*"))
44 if err != nil {
45 return nil, err
46 }
47
48 stats := make([]ClassThermalZoneStats, 0, len(zones))
49 for _, zone := range zones {
50 zoneStats, err := parseClassThermalZone(zone)
51 if err != nil {
52 if errors.Is(err, syscall.ENODATA) {
53 continue
54 }
55 return nil, err
56 }
57 zoneStats.Name = strings.TrimPrefix(filepath.Base(zone), "thermal_zone")
58 stats = append(stats, zoneStats)
59 }
60 return stats, nil
61 }
62
63 func parseClassThermalZone(zone string) (ClassThermalZoneStats, error) {
64
65 zoneType, err := util.SysReadFile(filepath.Join(zone, "type"))
66 if err != nil {
67 return ClassThermalZoneStats{}, err
68 }
69 zonePolicy, err := util.SysReadFile(filepath.Join(zone, "policy"))
70 if err != nil {
71 return ClassThermalZoneStats{}, err
72 }
73 zoneTemp, err := util.ReadIntFromFile(filepath.Join(zone, "temp"))
74 if err != nil {
75 return ClassThermalZoneStats{}, err
76 }
77
78
79 mode, err := util.SysReadFile(filepath.Join(zone, "mode"))
80 if err != nil && !os.IsNotExist(err) && !os.IsPermission(err) {
81 return ClassThermalZoneStats{}, err
82 }
83 zoneMode := util.ParseBool(mode)
84
85 var zonePassive *uint64
86 passive, err := util.ReadUintFromFile(filepath.Join(zone, "passive"))
87 if os.IsNotExist(err) || os.IsPermission(err) {
88 zonePassive = nil
89 } else if err != nil {
90 return ClassThermalZoneStats{}, err
91 } else {
92 zonePassive = &passive
93 }
94
95 return ClassThermalZoneStats{
96 Type: zoneType,
97 Policy: zonePolicy,
98 Temp: zoneTemp,
99 Mode: zoneMode,
100 Passive: zonePassive,
101 }, nil
102 }
103
View as plain text