forked from CGM_Public/pretix_original
Add basic instrumentation possibilities to pretix (#271)
* add basic instrumentation possibilities to pretix * make tabs to spaces * apply flake8 * implement upstreams suggestions, round 1 * adjust naming of redis-connection * address noredis * add view for metrics * implement HTTP basic auth in front of metrics-endpoint * rename labelset * make flake8-clean * implement upstreams suggestions, round 2 * correct minor slipups * fix missing return * let isort add an empty line * implement test for counter * implement upstream suggestions, round 3 * correct typo * implement first test for view * finish view-test * fix deprecated keyword * implement upstream-suggestions, round 4 * implement test for gauge * test exceptions as well * add db-decorator
This commit is contained in:
committed by
Raphael Michel
parent
d308821c4c
commit
d3327b1e45
43
src/pretix/base/views/metrics.py
Normal file
43
src/pretix/base/views/metrics.py
Normal file
@@ -0,0 +1,43 @@
|
||||
from django.conf import settings
|
||||
from django.http import HttpResponse
|
||||
|
||||
from .. import metrics
|
||||
|
||||
|
||||
def unauthed_response():
|
||||
content = "<html><title>Forbidden</title><body>You are not authorized to view this page.</body></html>"
|
||||
response = HttpResponse(content, content_type="text/html")
|
||||
response["WWW-Authenticate"] = 'Basic realm="metrics"'
|
||||
response.status_code = 401
|
||||
return response
|
||||
|
||||
|
||||
def serve_metrics(request):
|
||||
if not settings.METRICS_ENABLED:
|
||||
return unauthed_response()
|
||||
|
||||
# check if the user is properly authorized:
|
||||
if "HTTP_AUTHORIZATION" not in request.META:
|
||||
return unauthed_response()
|
||||
|
||||
method, credentials = request.META["HTTP_AUTHORIZATION"].split(" ", 1)
|
||||
if method.lower() != "basic":
|
||||
return unauthed_response()
|
||||
|
||||
user, passphrase = credentials.strip().decode("base64").split(":", 1)
|
||||
|
||||
if user != settings.METRICS_USER:
|
||||
return unauthed_response()
|
||||
if passphrase != settings.METRICS_PASSPHRASE:
|
||||
return unauthed_response()
|
||||
|
||||
# ok, the request passed the authentication-barrier, let's hand out the metrics:
|
||||
m = metrics.metric_values()
|
||||
|
||||
output = []
|
||||
for metric, value in m:
|
||||
output.append("{} {}".format(metric, str(value)))
|
||||
|
||||
content = "\n".join(output)
|
||||
|
||||
return HttpResponse(content)
|
||||
Reference in New Issue
Block a user