diff --git a/opensprinkler_prometheus_exporter.py b/opensprinkler_prometheus_exporter.py index a4cd8cd084454efb6c776a931c8deb52b5a775af..c100e269004eacd1a8a07ce8833ed8e9623b4b2d 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)