Skip to content

Commit 9098596

Browse files
committed
Add temperature data for freebsd
1 parent c1c1cd1 commit 9098596

2 files changed

Lines changed: 46 additions & 1 deletion

File tree

agent/sensors_default.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//go:build !windows
1+
//go:build !windows && !freebsd
22

33
package agent
44

agent/sensors_freebsd.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
//go:build freebsd
2+
3+
package agent
4+
5+
import (
6+
"context"
7+
"fmt"
8+
9+
"github.com/shirou/gopsutil/v4/sensors"
10+
"golang.org/x/sys/unix"
11+
)
12+
13+
var getSensorTemps getTempsFn = freebsdGetTemps
14+
15+
// freebsdGetTemps reads hardware temperatures from FreeBSD sysctls.
16+
// CPU temps come from dev.cpu.N.temperature (coretemp/amdtemp drivers).
17+
// System temps come from hw.acpi.thermal.tzN.temperature (ACPI thermal zones).
18+
// Values are in deciKelvin; conversion: °C = val/10 - 273.15.
19+
func freebsdGetTemps(_ context.Context) ([]sensors.TemperatureStat, error) {
20+
var temps []sensors.TemperatureStat
21+
22+
for i := range 64 {
23+
val, err := unix.SysctlUint32(fmt.Sprintf("dev.cpu.%d.temperature", i))
24+
if err != nil {
25+
break
26+
}
27+
temps = append(temps, sensors.TemperatureStat{
28+
SensorKey: fmt.Sprintf("cpu%d", i),
29+
Temperature: float64(val)/10.0 - 273.15,
30+
})
31+
}
32+
33+
for i := range 16 {
34+
val, err := unix.SysctlUint32(fmt.Sprintf("hw.acpi.thermal.tz%d.temperature", i))
35+
if err != nil {
36+
break
37+
}
38+
temps = append(temps, sensors.TemperatureStat{
39+
SensorKey: fmt.Sprintf("tz%d", i),
40+
Temperature: float64(val)/10.0 - 273.15,
41+
})
42+
}
43+
44+
return temps, nil
45+
}

0 commit comments

Comments
 (0)