From 18339f133b68e43b49e78b74847bc914d853db49 Mon Sep 17 00:00:00 2001
From: Varac <varac@varac.net>
Date: Tue, 2 Aug 2022 22:36:30 +0200
Subject: [PATCH] Add more and group metrics
---
opensprinkler_prometheus_exporter.py | 54 +++++++++++++++++-----------
1 file changed, 33 insertions(+), 21 deletions(-)
diff --git a/opensprinkler_prometheus_exporter.py b/opensprinkler_prometheus_exporter.py
index a4cd8cd..c100e26 100755
--- a/opensprinkler_prometheus_exporter.py
+++ b/opensprinkler_prometheus_exporter.py
@@ -30,22 +30,24 @@ log = logging.getLogger(__name__)
# Initialize Prometheus instrumentation
-wt_base_eto = Gauge('opensprinkler_wt_base_eto', 'Weather provider: BaseETo')
-wt_eto = Gauge('opensprinkler_wt_eto', 'Weather provider: ETo')
+wt_eto = Gauge('opensprinkler_wt_eto', 'Weather provider: ETo', ['type'])
wt_radiation = Gauge('opensprinkler_wt_radiation',
'Weather provider: radiation')
-wt_temp_min = Gauge('opensprinkler_wt_temp_min',
- 'Weather provider: min temperature')
-wt_temp_max = Gauge('opensprinkler_wt_temp_max',
- 'Weather provider: max temperature')
-wt_hum_min = Gauge('opensprinkler_wt_hum_min',
- 'Weather provider: min humidity')
-wt_hum_max = Gauge('opensprinkler_wt_hum_max',
- 'Weather provider: max humidity')
+wt_temp = Gauge('opensprinkler_wt_temp',
+ 'Weather provider: Temperature (min/max)', ['type'])
+wt_hum = Gauge('opensprinkler_wt_hum',
+ 'Weather provider: Humidity (min/max)', ['type'])
wt_wind = Gauge('opensprinkler_wt_wind', 'Weather provider: wind speed')
wt_p = Gauge('opensprinkler_wt_p', 'Weather provider: ?')
-wt_sunrise = Gauge('opensprinkler_wt_sunrise', 'Daytime of sunrise (mins)')
-wt_sunset = Gauge('opensprinkler_wt_sunset', 'Daytime of sunset (mins)')
+sun = Gauge('opensprinkler_sunrise',
+ 'Daytime of sunrise (mins) (sunrise/sunset)', ['type'])
+last_weather_call = Gauge('opensprinkler_last_weather_call',
+ 'Timestamp of the last weather call/query (epoch time) (request/response)',
+ ['type'])
+water_level = Gauge('opensprinkler_water_level',
+ 'Water level (i.e. % Watering, 0 to 250)')
+station_open = Gauge('opensprinkler_station_open',
+ 'Station status, 0=closed, 1=open', ['station'])
def main():
@@ -72,19 +74,29 @@ def main():
j = json.loads(req.content)
log.debug('Got a successful response: %s', j)
wto = j['settings']['wto']
- wtdata = j['settings']['wtdata']
+ wt_eto.labels(type='base').set(wto['baseETo'])
- wt_base_eto.set(wto['baseETo'])
- wt_eto.set(wtdata['eto'])
+ wtdata = j['settings']['wtdata']
+ wt_eto.labels(type='current').set(wtdata['eto'])
wt_radiation.set(wtdata['radiation'])
- wt_temp_min.set(wtdata['minT'])
- wt_temp_max.set(wtdata['maxT'])
- wt_hum_min.set(wtdata['minH'])
- wt_hum_max.set(wtdata['maxH'])
+ wt_temp.labels(type='min').set(wtdata['minT'])
+ wt_temp.labels(type='max').set(wtdata['maxT'])
+ wt_hum.labels(type='min').set(wtdata['minH'])
+ wt_hum.labels(type='max').set(wtdata['maxH'])
wt_wind.set(wtdata['wind'])
wt_p.set(wtdata['p'])
- wt_sunrise.set(j['settings']['sunrise'])
- wt_sunset.set(j['settings']['sunset'])
+ sun.labels(type='sunrise').set(j['settings']['sunrise'])
+ sun.labels(type='sunset').set(j['settings']['sunset'])
+ last_weather_call.labels(
+ type='request').set(j['settings']['lwc'])
+ last_weather_call.labels(type='response').set(
+ j['settings']['lswc'])
+ water_level.set(j['options']['wl'])
+
+ station_status = j['status']['sn']
+ for i in range(j['status']['nstations']):
+ station_open.labels(station=i+1).set(station_status[i])
+
else:
log.info(req.status_code)
--
GitLab