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
1 year ago
|
// 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
|
||
|
}
|