From f0cd88f3fc35175294ffdb45bfa3bfff1de5137e Mon Sep 17 00:00:00 2001 From: s3lph Date: Tue, 3 Mar 2020 22:10:41 +0100 Subject: [PATCH] Add Prometheus-style metrics --- matemat/webserver/pagelets/__init__.py | 1 + matemat/webserver/pagelets/metrics.py | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 matemat/webserver/pagelets/metrics.py diff --git a/matemat/webserver/pagelets/__init__.py b/matemat/webserver/pagelets/__init__.py index 629cd5f..96b8234 100644 --- a/matemat/webserver/pagelets/__init__.py +++ b/matemat/webserver/pagelets/__init__.py @@ -11,6 +11,7 @@ from .touchkey import touchkey_page from .buy import buy from .deposit import deposit from .admin import admin +from .metrics import metrics from .moduser import moduser from .modproduct import modproduct from .userbootstrap import userbootstrap diff --git a/matemat/webserver/pagelets/metrics.py b/matemat/webserver/pagelets/metrics.py new file mode 100644 index 0000000..62206ed --- /dev/null +++ b/matemat/webserver/pagelets/metrics.py @@ -0,0 +1,23 @@ +from bottle import abort, response, route + +from matemat.db import MatematDatabase +from matemat.webserver.config import get_app_config + + +@route('/metrics') +def metrics(): + config = get_app_config() + if config.get('MetricsEnabled', '0') != '1': + return abort(403, + 'Prometheus metrics are disable in configuration. ' + 'If you believe this is an error, contact your administrator.') + with MatematDatabase(config['DatabaseFile']) as db: + products = db.list_products() + m = '''# TYPE matemat_beverage_supply_count gauge +# HELP matemat_beverage_supply_count Number of bottles available +''' + for product in products: + name = product.name.replace('"', '\\"') + m += f'matemat_beverage_supply_count{{product="{name}"}} {product.stock}\n' + response.headers['Content-Type'] = 'text/plain' + return m