mirror of https://github.com/shirou/gopsutil
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1022 B
Go
50 lines
1022 B
Go
// SPDX-License-Identifier: BSD-3-Clause
|
|
//go:build solaris
|
|
|
|
package sensors
|
|
|
|
import (
|
|
"context"
|
|
"encoding/csv"
|
|
"io"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
func TemperaturesWithContext(ctx context.Context) ([]TemperatureStat, error) {
|
|
var ret []TemperatureStat
|
|
|
|
out, err := invoke.CommandWithContext(ctx, "ipmitool", "-c", "sdr", "list")
|
|
if err != nil {
|
|
return ret, err
|
|
}
|
|
|
|
r := csv.NewReader(strings.NewReader(string(out)))
|
|
// Output may contain errors, e.g. "bmc_send_cmd: Permission denied", don't expect a consistent number of records
|
|
r.FieldsPerRecord = -1
|
|
for {
|
|
record, err := r.Read()
|
|
if err == io.EOF {
|
|
break
|
|
}
|
|
if err != nil {
|
|
return ret, err
|
|
}
|
|
// CPU1 Temp,40,degrees C,ok
|
|
if len(record) < 3 || record[1] == "" || record[2] != "degrees C" {
|
|
continue
|
|
}
|
|
v, err := strconv.ParseFloat(record[1], 64)
|
|
if err != nil {
|
|
return ret, err
|
|
}
|
|
ts := TemperatureStat{
|
|
SensorKey: strings.TrimSuffix(record[0], " Temp"),
|
|
Temperature: v,
|
|
}
|
|
ret = append(ret, ts)
|
|
}
|
|
|
|
return ret, nil
|
|
}
|