diff --git a/lib/view/line.py b/lib/view/line.py index e1fd75d..e1e5f05 100644 --- a/lib/view/line.py +++ b/lib/view/line.py @@ -28,6 +28,7 @@ import pytz from constants import WWO_CODE, WEATHER_SYMBOL, WIND_DIRECTION, WEATHER_SYMBOL_WIDTH_VTE from weather_data import get_weather_data from . import v2 +from . import prometheus PRECONFIGURED_FORMAT = { '1': u'%c %t', @@ -336,6 +337,8 @@ def format_weather_data(query, parsed_query, data): if format_line == "j1": return render_json(data['data']) + if format_line == "p1": + return prometheus.render_prometheus(data['data']) if format_line[:2] == "v2": return v2.main(query, parsed_query, data) diff --git a/lib/view/prometheus.py b/lib/view/prometheus.py new file mode 100644 index 0000000..bee1fb5 --- /dev/null +++ b/lib/view/prometheus.py @@ -0,0 +1,43 @@ +""" +Rendering weather data in the Prometheus format. + +""" + +EXPORTED_FIELDS = [ + "FeelsLikeC", "FeelsLikeF", "cloudcover", "humidity", + "precipMM", "pressure", "temp_C", "temp_F", "uvIndex", + "visibility", "winddirDegree", "windspeedKmph", + "windspeedMiles", + ] + +def _render_current(data): + + output = [] + current_condition = data["current_condition"][0] + for field in EXPORTED_FIELDS: + try: + output.append("%s(forecast=\"0h\") %s" % (field, current_condition[field])) + except IndexError: + pass + + try: + weather_desc = current_condition["weatherDesc"][0]["value"] + output.append("weatherDesc{forecast=\"0h\", description=\"%s\"} 1" % weather_desc) + except IndexError: + pass + + try: + winddir16point = current_condition["winddir16Point"] + output.append("winddir16Point{forecast=\"0h\", description=\"%s\"} 1" % winddir16point) + except IndexError: + pass + + return "\n".join(output)+"\n" + +def render_prometheus(data): + """ + Convert `data` into Prometheus format + and return it as sting. + """ + + return _render_current(data)