...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package sysfs
18
19 import (
20 "path/filepath"
21 "strconv"
22 "strings"
23
24 "github.com/prometheus/procfs/internal/util"
25 )
26
27
28
29
30 type ClassCoolingDeviceStats struct {
31 Name string
32 Type string
33 MaxState int64
34 CurState int64
35 }
36
37 func (fs FS) ClassCoolingDeviceStats() ([]ClassCoolingDeviceStats, error) {
38 cds, err := filepath.Glob(fs.sys.Path("class/thermal/cooling_device[0-9]*"))
39 if err != nil {
40 return []ClassCoolingDeviceStats{}, err
41 }
42
43 var coolingDeviceStats = ClassCoolingDeviceStats{}
44 stats := make([]ClassCoolingDeviceStats, len(cds))
45 for i, cd := range cds {
46 cdName := strings.TrimPrefix(filepath.Base(cd), "cooling_device")
47
48 coolingDeviceStats, err = parseCoolingDeviceStats(cd)
49 if err != nil {
50 return []ClassCoolingDeviceStats{}, err
51 }
52
53 coolingDeviceStats.Name = cdName
54 stats[i] = coolingDeviceStats
55 }
56 return stats, nil
57 }
58
59 func parseCoolingDeviceStats(cd string) (ClassCoolingDeviceStats, error) {
60 cdType, err := util.SysReadFile(filepath.Join(cd, "type"))
61 if err != nil {
62 return ClassCoolingDeviceStats{}, err
63 }
64
65 cdMaxStateString, err := util.SysReadFile(filepath.Join(cd, "max_state"))
66 if err != nil {
67 return ClassCoolingDeviceStats{}, err
68 }
69 cdMaxStateInt, err := strconv.ParseInt(cdMaxStateString, 10, 64)
70 if err != nil {
71 return ClassCoolingDeviceStats{}, err
72 }
73
74
75
76 cdCurStateString, err := util.SysReadFile(filepath.Join(cd, "cur_state"))
77 if err != nil {
78 return ClassCoolingDeviceStats{}, err
79 }
80
81 cdCurStateInt, err := strconv.ParseInt(cdCurStateString, 10, 64)
82 if err != nil {
83 return ClassCoolingDeviceStats{}, err
84 }
85
86 return ClassCoolingDeviceStats{
87 Type: cdType,
88 MaxState: cdMaxStateInt,
89 CurState: cdCurStateInt,
90 }, nil
91 }
92
View as plain text