Add Prometheus-style metrics

This commit is contained in:
s3lph 2020-03-03 22:10:41 +01:00
parent 7be52053bd
commit f0cd88f3fc
2 changed files with 24 additions and 0 deletions

View file

@ -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

View file

@ -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