// SPDX-License-Identifier: BSD-3-Clause //go:build solaris package sensors import ( "context" "encoding/csv" "errors" "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 errors.Is(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 }