diff options
Diffstat (limited to 'pkgs/servers/monitoring/prometheus/smartctl-exporter/0001-Return-the-cached-value-if-it-s-not-time-to-scan-aga.patch')
-rw-r--r-- | pkgs/servers/monitoring/prometheus/smartctl-exporter/0001-Return-the-cached-value-if-it-s-not-time-to-scan-aga.patch | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/pkgs/servers/monitoring/prometheus/smartctl-exporter/0001-Return-the-cached-value-if-it-s-not-time-to-scan-aga.patch b/pkgs/servers/monitoring/prometheus/smartctl-exporter/0001-Return-the-cached-value-if-it-s-not-time-to-scan-aga.patch new file mode 100644 index 00000000000..28616251f37 --- /dev/null +++ b/pkgs/servers/monitoring/prometheus/smartctl-exporter/0001-Return-the-cached-value-if-it-s-not-time-to-scan-aga.patch @@ -0,0 +1,51 @@ +From e81b06df67b1d42ef915615fafa0b56ef956673b Mon Sep 17 00:00:00 2001 +From: Andreas Fuchs <asf@boinkor.net> +Date: Thu, 11 Feb 2021 17:30:44 -0500 +Subject: [PATCH] Return the cached value if it's not time to scan again yet + +This should ensure that if we have a valid value cached (which ought +to be every time after the first scan), we return it as metrics. + +This fixes the crashes that would happen if queries happened earlier +than the re-scan interval allowed. + +Address review feedback: Shorten the time-to-scan logic + +We can express this in a single if statement, so it takes fewer lines +to do the "should we check again" check. +--- + readjson.go | 11 ++--------- + 1 file changed, 2 insertions(+), 9 deletions(-) + +diff --git a/readjson.go b/readjson.go +index da35448..c9996fd 100644 +--- a/readjson.go ++++ b/readjson.go +@@ -78,14 +78,7 @@ func readData(device string) (gjson.Result, error) { + + if _, err := os.Stat(device); err == nil { + cacheValue, cacheOk := jsonCache[device] +- timeToScan := false +- if cacheOk { +- timeToScan = time.Now().After(cacheValue.LastCollect.Add(options.SMARTctl.CollectPeriodDuration)) +- } else { +- timeToScan = true +- } +- +- if timeToScan { ++ if !cacheOk || time.Now().After(cacheValue.LastCollect.Add(options.SMARTctl.CollectPeriodDuration)) { + json, ok := readSMARTctl(device) + if ok { + jsonCache[device] = JSONCache{JSON: json, LastCollect: time.Now()} +@@ -93,7 +86,7 @@ func readData(device string) (gjson.Result, error) { + } + return gjson.Parse(DEFAULT_EMPTY_JSON), fmt.Errorf("smartctl returned bad data for device %s", device) + } +- return gjson.Parse(DEFAULT_EMPTY_JSON), fmt.Errorf("Too early collect called for device %s", device) ++ return cacheValue.JSON, nil + } + return gjson.Parse(DEFAULT_EMPTY_JSON), fmt.Errorf("Device %s unavialable", device) + } +-- +2.33.1 + |