diff --git a/src/pretix/base/metrics.py b/src/pretix/base/metrics.py index 26d392cf6f..92cc69ca61 100755 --- a/src/pretix/base/metrics.py +++ b/src/pretix/base/metrics.py @@ -174,14 +174,13 @@ class Histogram(Metric): summetric = self._construct_metric_identifier(self.name + '_sum', kwargs) self._inc_in_redis(summetric, amount) + kwargs_le = dict(kwargs.items()) for i, bound in enumerate(self.buckets): if amount <= bound: - kwargs_le = dict(kwargs.items()) kwargs_le['le'] = _float_to_go_string(bound) bmetric = self._construct_metric_identifier(self.name + '_bucket', kwargs_le, labelnames=self.labelnames + ["le"]) self._inc_in_redis(bmetric, 1) - break def metric_values(): @@ -204,11 +203,11 @@ def metric_values(): """ Provided metrics """ -http_view_requests = Counter("http_view_requests", "Total number of HTTP requests made.", - ["status_code", "method", "url_name"]) -http_view_times = Histogram("http_view_times", "Return time of views.", - ["status_code", "method", "url_name"]) -celery_task_runs = Counter("celery_task_runs", "Total calls to a celery task", - ["task_name", "status"]) -celery_task_times = Histogram("celery_task_times", "Call time of a celery task", - ["task_name"]) +pretix_view_requests_total = Counter("pretix_view_requests_total", "Total number of HTTP requests made.", + ["status_code", "method", "url_name"]) +pretix_view_duration_seconds = Histogram("pretix_view_duration_seconds", "Return time of views.", + ["status_code", "method", "url_name"]) +pretix_task_runs_total = Counter("pretix_task_runs_total", "Total calls to a celery task", + ["task_name", "status"]) +pretix_task_duration_seconds = Histogram("pretix_task_duration_seconds", "Call time of a celery task", + ["task_name"]) diff --git a/src/pretix/base/services/async.py b/src/pretix/base/services/async.py index 0331cea84b..145a88ae08 100644 --- a/src/pretix/base/services/async.py +++ b/src/pretix/base/services/async.py @@ -15,7 +15,9 @@ import time from django.conf import settings from django.db import transaction -from pretix.base.metrics import celery_task_runs, celery_task_times +from pretix.base.metrics import ( + pretix_task_duration_seconds, pretix_task_runs_total, +) from pretix.celery_app import app @@ -38,7 +40,7 @@ class ProfiledTask(app.Task): tottime = time.perf_counter() - t0 if settings.METRICS_ENABLED: - celery_task_times.observe(tottime, task_name=self.name) + pretix_task_duration_seconds.observe(tottime, task_name=self.name) return ret def on_failure(self, exc, task_id, args, kwargs, einfo): @@ -48,13 +50,13 @@ class ProfiledTask(app.Task): if isinstance(exc, t): expected = True break - celery_task_runs.inc(1, task_name=self.name, status="expected-error" if expected else "error") + pretix_task_runs_total.inc(1, task_name=self.name, status="expected-error" if expected else "error") return super().on_failure(exc, task_id, args, kwargs, einfo) def on_success(self, retval, task_id, args, kwargs): if settings.METRICS_ENABLED: - celery_task_runs.inc(1, task_name=self.name, status="success") + pretix_task_runs_total.inc(1, task_name=self.name, status="success") return super().on_success(retval, task_id, args, kwargs) diff --git a/src/pretix/helpers/metrics/middleware.py b/src/pretix/helpers/metrics/middleware.py index 9eb3105bef..dd5941db4c 100644 --- a/src/pretix/helpers/metrics/middleware.py +++ b/src/pretix/helpers/metrics/middleware.py @@ -2,7 +2,9 @@ import time from django.urls import resolve -from pretix.base.metrics import http_view_requests, http_view_times +from pretix.base.metrics import ( + pretix_view_duration_seconds, pretix_view_requests_total, +) class MetricsMiddleware(object): @@ -28,9 +30,9 @@ class MetricsMiddleware(object): t0 = time.perf_counter() resp = self.get_response(request) tdiff = time.perf_counter() - t0 - http_view_requests.inc(1, status_code=resp.status_code, method=request.method, - url_name=url.namespace + ':' + url.url_name) - http_view_times.observe(tdiff, status_code=resp.status_code, method=request.method, - url_name=url.namespace + ':' + url.url_name) + pretix_view_requests_total.inc(1, status_code=resp.status_code, method=request.method, + url_name=url.namespace + ':' + url.url_name) + pretix_view_duration_seconds.observe(tdiff, status_code=resp.status_code, method=request.method, + url_name=url.namespace + ':' + url.url_name) return resp diff --git a/src/tests/base/test_metrics.py b/src/tests/base/test_metrics.py index 47918167fb..539183975d 100644 --- a/src/tests/base/test_metrics.py +++ b/src/tests/base/test_metrics.py @@ -36,27 +36,27 @@ def test_counter(monkeypatch): monkeypatch.setattr(metrics, "redis", fake_redis, raising=False) # now test - fullname_get = metrics.http_view_requests._construct_metric_identifier( - 'http_view_requests', {"status_code": "200", "url_name": "foo", "method": "GET"} + fullname_get = metrics.pretix_view_requests_total._construct_metric_identifier( + 'pretix_view_requests_total', {"status_code": "200", "url_name": "foo", "method": "GET"} ) - fullname_post = metrics.http_view_requests._construct_metric_identifier( - 'http_view_requests', {"status_code": "200", "url_name": "foo", "method": "POST"} + fullname_post = metrics.pretix_view_requests_total._construct_metric_identifier( + 'pretix_view_requests_total', {"status_code": "200", "url_name": "foo", "method": "POST"} ) - metrics.http_view_requests.inc(status_code="200", url_name="foo", method="GET") + metrics.pretix_view_requests_total.inc(status_code="200", url_name="foo", method="GET") assert fake_redis.storage[fullname_get] == 1 - metrics.http_view_requests.inc(status_code="200", url_name="foo", method="GET") + metrics.pretix_view_requests_total.inc(status_code="200", url_name="foo", method="GET") assert fake_redis.storage[fullname_get] == 2 - metrics.http_view_requests.inc(7, status_code="200", url_name="foo", method="GET") + metrics.pretix_view_requests_total.inc(7, status_code="200", url_name="foo", method="GET") assert fake_redis.storage[fullname_get] == 9 - metrics.http_view_requests.inc(7, status_code="200", url_name="foo", method="POST") + metrics.pretix_view_requests_total.inc(7, status_code="200", url_name="foo", method="POST") assert fake_redis.storage[fullname_get] == 9 assert fake_redis.storage[fullname_post] == 7 with pytest.raises(ValueError): - metrics.http_view_requests.inc(-4, status_code="200", url_name="foo", method="POST") + metrics.pretix_view_requests_total.inc(-4, status_code="200", url_name="foo", method="POST") with pytest.raises(ValueError): - metrics.http_view_requests.inc(-4, status_code="200", url_name="foo", method="POST", too="much") + metrics.pretix_view_requests_total.inc(-4, status_code="200", url_name="foo", method="POST", too="much") # test dimensionless counters dimless_counter = metrics.Counter("dimless_counter", "this is a helpstring") @@ -137,6 +137,8 @@ def test_histogram(monkeypatch): assert fake_redis.storage['my_histogram_count{dimension="one"}'] == 1 assert fake_redis.storage['my_histogram_sum{dimension="one"}'] == 3.0 assert fake_redis.storage['my_histogram_bucket{dimension="one",le="5.0"}'] == 1 + assert fake_redis.storage['my_histogram_bucket{dimension="one",le="10.0"}'] == 1 + assert fake_redis.storage['my_histogram_bucket{dimension="one",le="+Inf"}'] == 1 test_hist.observe(3.0, dimension="one") assert fake_redis.storage['my_histogram_count{dimension="one"}'] == 2 assert fake_redis.storage['my_histogram_sum{dimension="one"}'] == 6.0 @@ -144,14 +146,14 @@ def test_histogram(monkeypatch): test_hist.observe(0.9, dimension="one") assert fake_redis.storage['my_histogram_count{dimension="one"}'] == 3 assert fake_redis.storage['my_histogram_sum{dimension="one"}'] == 6.9 - assert fake_redis.storage['my_histogram_bucket{dimension="one",le="5.0"}'] == 2 + assert fake_redis.storage['my_histogram_bucket{dimension="one",le="5.0"}'] == 3 assert fake_redis.storage['my_histogram_bucket{dimension="one",le="1.0"}'] == 1 test_hist.observe(0.9, dimension="two") assert fake_redis.storage['my_histogram_count{dimension="one"}'] == 3 assert fake_redis.storage['my_histogram_count{dimension="two"}'] == 1 assert fake_redis.storage['my_histogram_sum{dimension="one"}'] == 6.9 assert fake_redis.storage['my_histogram_sum{dimension="two"}'] == 0.9 - assert fake_redis.storage['my_histogram_bucket{dimension="one",le="5.0"}'] == 2 + assert fake_redis.storage['my_histogram_bucket{dimension="one",le="5.0"}'] == 3 assert fake_redis.storage['my_histogram_bucket{dimension="one",le="1.0"}'] == 1 assert fake_redis.storage['my_histogram_bucket{dimension="two",le="1.0"}'] == 1 @@ -164,11 +166,11 @@ def test_metrics_view(monkeypatch, client): monkeypatch.setattr(metricsview.metrics, "redis", fake_redis, raising=False) counter_value = 3 - fullname = metrics.http_view_requests._construct_metric_identifier( + fullname = metrics.pretix_view_requests_total._construct_metric_identifier( 'http_requests_total', {"status_code": "200", "url_name": "foo", "method": "GET"} ) - metricsview.metrics.http_view_requests.inc(counter_value, status_code="200", url_name="foo", method="GET") + metricsview.metrics.pretix_view_requests_total.inc(counter_value, status_code="200", url_name="foo", method="GET") # test unauthorized-page assert "You are not authorized" in client.get('/metrics').content.decode('utf-8')