diff --git a/metrics.py b/metrics.py index e8b7c96..3d8a48a 100644 --- a/metrics.py +++ b/metrics.py @@ -1,7 +1,8 @@ import time from threading import Lock, Timer -from prometheus_client import Gauge +from prometheus_client import Gauge, make_wsgi_app +from werkzeug.middleware.dispatcher import DispatcherMiddleware import config @@ -14,12 +15,21 @@ lock = Lock() -def init_metrics(db_connection): +def init_metrics(app, db_connection): + """ + Initialise Prometheus Metrics + :param app: Flask app to serve metrics at `/metrics` from + :param db_connection: Connection to the database to get stats + """ g = Gauge(f'{METRICS_PREFIX}_hits_total', 'Total number of hits', ['site', 'path']) register_labels(db_connection, g) Timer(REGISTER_INTERVAL_SEC, lambda: register_labels(db_connection, g)).start() + app.wsgi_app = DispatcherMiddleware(app.wsgi_app, { + '/metrics': make_wsgi_app() + }) + def register_labels(db_connection, gauge): url_counts = db_connection.get_top_urls(db_connection.get_connection(), -1) diff --git a/server.py b/server.py index 94d615b..e78b5a9 100644 --- a/server.py +++ b/server.py @@ -14,13 +14,8 @@ # Prometheus metrics if config.EXPOSE_METRICS: - from prometheus_client import make_wsgi_app - from werkzeug.middleware.dispatcher import DispatcherMiddleware from metrics import init_metrics - init_metrics(db_connection) - app.wsgi_app = DispatcherMiddleware(app.wsgi_app, { - '/metrics': make_wsgi_app() - }) + init_metrics(app, db_connection) def make_text_response(count, url, cookie_required):