From 15f6d277a96ce2cbac85c017d757ca6e52647352 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Rasmussen?= Date: Wed, 3 Aug 2022 15:27:27 +0200 Subject: [PATCH] Return NaN for invalid temperature readings --- pkg/temperature/ds18b20.go | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/pkg/temperature/ds18b20.go b/pkg/temperature/ds18b20.go index 779f745..a86740c 100644 --- a/pkg/temperature/ds18b20.go +++ b/pkg/temperature/ds18b20.go @@ -184,7 +184,15 @@ func readSensors(hub *sentry.Hub) bool { WithLabelValues(sensor.Name). Set(tw) - metrics.TemperatureSensorReadingStatus.WithLabelValues(sensor.Name, "ok").Inc() + var statusStr string + if err == nil { + statusStr = "ok" + } else { + statusStr = "fail" + } + metrics.TemperatureSensorReadingStatus. + WithLabelValues(sensor.Name, statusStr). + Inc() } // Throw away reading if any sensor failed @@ -235,28 +243,28 @@ func read(sensor string) (int64, error) { path := filepath.Join("/sys/bus/w1/devices", sensor, "w1_slave") data, err := ioutil.ReadFile(path) if err != nil { - return 0.0, err + return NaN, err } raw := string(data) if !strings.Contains(raw, " YES") { - return 0.0, fmt.Errorf("%v: %w: checksum failed [%v]", sensor, ErrReadSensor, raw) + return NaN, fmt.Errorf("%v: %w: checksum failed [%v]", sensor, ErrReadSensor, raw) } i := strings.LastIndex(raw, "t=") if i == -1 { - return 0.0, fmt.Errorf("%v: %w: t= not found in [%v]", sensor, ErrReadSensor, raw) + return NaN, fmt.Errorf("%v: %w: t= not found in [%v]", sensor, ErrReadSensor, raw) } c, err := strconv.ParseInt(raw[i+2:len(raw)-1], 10, 64) if err != nil { - return 0.0, err + return NaN, err } // Ignore magic value -128 if c == -128000 { - return 0.0, fmt.Errorf("%v: magic value -128 detected", sensor) + return NaN, fmt.Errorf("%v: magic value -128 detected", sensor) } return c, nil