From bd34dd44a080fda806a9aab299e9919f6d9a0050 Mon Sep 17 00:00:00 2001 From: Tim Neumann Date: Mon, 19 Apr 2021 16:34:01 +0200 Subject: [PATCH] Fix #2029 -- Drop queue metrics on non-redis brokers (#2030) The current implementation only works if redis is used as broker. Otherwise it would throw an Exception, which causes a 500 to be returend. Now we just don't have celery metrics in those cases. Fixes #2029 --- src/pretix/base/metrics.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/pretix/base/metrics.py b/src/pretix/base/metrics.py index 9fe4063dc9..9daa828f00 100755 --- a/src/pretix/base/metrics.py +++ b/src/pretix/base/metrics.py @@ -286,17 +286,19 @@ def metric_values(): metrics['pretix_model_instances']['{model="%s"}' % m._meta] = estimate_count_fast(m) if settings.HAS_CELERY: - client = app.broker_connection().channel().client - for q in settings.CELERY_TASK_QUEUES: - llen = client.llen(q.name) - lfirst = client.lindex(q.name, -1) - metrics['pretix_celery_tasks_queued_count']['{queue="%s"}' % q.name] = llen - if lfirst: - ldata = json.loads(lfirst) - dt = time.time() - ldata.get('created', 0) - metrics['pretix_celery_tasks_queued_age_seconds']['{queue="%s"}' % q.name] = dt - else: - metrics['pretix_celery_tasks_queued_age_seconds']['{queue="%s"}' % q.name] = 0 + channel = app.broker_connection().channel() + if hasattr(channel, 'client') and channel.client is not None: + client = channel.client + for q in settings.CELERY_TASK_QUEUES: + llen = client.llen(q.name) + lfirst = client.lindex(q.name, -1) + metrics['pretix_celery_tasks_queued_count']['{queue="%s"}' % q.name] = llen + if lfirst: + ldata = json.loads(lfirst) + dt = time.time() - ldata.get('created', 0) + metrics['pretix_celery_tasks_queued_age_seconds']['{queue="%s"}' % q.name] = dt + else: + metrics['pretix_celery_tasks_queued_age_seconds']['{queue="%s"}' % q.name] = 0 return metrics