summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKraust <secretdragoon@gmail.com>2019-07-14 09:46:07 -0400
committerKraust <secretdragoon@gmail.com>2019-07-14 09:46:07 -0400
commitaa496ba38d7c51e2e0063ef2bc72c8e32fe4a711 (patch)
treebfff610a815c43be6f8b7cbb60eda88a816b4002
parente1f3488c4cb3a15dc95d5d2c32b8727fea9ddff2 (diff)
FreeBSD Fixes
- Added NVIDIA GPU Temperature Support - Fixed a bug where CPU temp would not be displayed if a syctl option was not found - Fixed a bug where Swap was not being displayed on mirroed ZFS partitions.
-rw-r--r--src/widgets/mem_freebsd.go5
-rw-r--r--src/widgets/temp_freebsd.go44
2 files changed, 45 insertions, 4 deletions
diff --git a/src/widgets/mem_freebsd.go b/src/widgets/mem_freebsd.go
index b3773c9..f11c9ab 100644
--- a/src/widgets/mem_freebsd.go
+++ b/src/widgets/mem_freebsd.go
@@ -42,7 +42,10 @@ func gatherSwapInfo() (MemoryInfo, error) {
}
}
- ss := strings.Split(strings.TrimSuffix(string(output), "\n"), " ")
+ s := strings.TrimSuffix(string(output), "\n")
+ s = strings.ReplaceAll(s, "\n", " ")
+ ss := strings.Split(s, " ")
+ ss = ss[((len(ss)/3)-1)*3:]
return convert(ss)
}
diff --git a/src/widgets/temp_freebsd.go b/src/widgets/temp_freebsd.go
index 2990123..714e674 100644
--- a/src/widgets/temp_freebsd.go
+++ b/src/widgets/temp_freebsd.go
@@ -35,22 +35,60 @@ func refineOutput(output []byte) (float64, error) {
return value, nil
}
+func collectNvidiaGPUSensors() []sensorMeasurement {
+ var measurements []sensorMeasurement
+
+ _, err := exec.Command("sysctl", "-n", "hw.nvidia.gpus.0.model").Output()
+ if err == nil {
+ output, err := exec.Command("nvidia-settings", "-q", "gpucoretemp", "-t").Output()
+ if err != nil {
+ log.Printf("Failed to get nvidia gpu temperature from nvidia-settings")
+ } else {
+ s := strings.TrimSuffix(string(output), "\n")
+ s = strings.ReplaceAll(s, "\n", " ")
+ ss := strings.Split(s, " ")
+ for i := 1; i < len(ss); i++ {
+ value, err := refineOutput([]byte(ss[i]))
+ if err != nil {
+ log.Printf("Failed to parse nvidia-settings output")
+ }
+ label := fmt.Sprintf("Nvidia GPU %d", i-1)
+ measurements = append(measurements, sensorMeasurement{label, value})
+ }
+ }
+ }
+
+ return measurements
+}
+
+func collectGPUSensors() []sensorMeasurement {
+ var measurements []sensorMeasurement
+
+ m := collectNvidiaGPUSensors()
+ measurements = append(measurements, m...)
+
+ return measurements
+}
+
func collectSensors() ([]sensorMeasurement, error) {
var measurements []sensorMeasurement
for k, v := range sensorOIDS {
output, err := exec.Command("sysctl", "-n", k).Output()
if err != nil {
- return nil, fmt.Errorf("failed to execute 'sysctl' command: %v", err)
+ continue
}
value, err := refineOutput(output)
if err != nil {
- return nil, fmt.Errorf("failed to execute 'sysctl' command: %v", err)
+ continue
}
measurements = append(measurements, sensorMeasurement{v, value})
-
}
+
+ m := collectGPUSensors()
+ measurements = append(measurements, m...)
+
return measurements, nil
}