From 126372a75867ebfa7385a75cee093bf9f055e751 Mon Sep 17 00:00:00 2001 From: Daan Sprenkels Date: Mon, 9 Apr 2018 17:00:37 +0200 Subject: [PATCH] metrics: Add users in queue --- marietje/metrics/views.py | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/marietje/metrics/views.py b/marietje/metrics/views.py index e975772..3fd28f7 100644 --- a/marietje/metrics/views.py +++ b/marietje/metrics/views.py @@ -1,17 +1,30 @@ -from prometheus_client import generate_latest, Gauge - -from django.db.models import Q +from django.db.models import Count, Q from django.http import HttpResponse +from prometheus_client import generate_latest, Gauge from queues.models import Queue, PlaylistSong # Export queue length -g = Gauge('marietje_queue_length', 'Marietje queue length', ['name']) +queue_length_gauge = Gauge('marietje_queue_length', 'Marietje queue length', ['name']) for queue in Queue.objects.all(): def _get_queue_length(): - return PlaylistSong.objects.filter(Q(playlist=queue.playlist_id), - Q(state=0) | Q(state=1)).count() - g.labels(name=queue).set_function(_get_queue_length) + return (PlaylistSong.objects + .filter(Q(playlist=queue.playlist_id), Q(state=0) | Q(state=1)) + .count()) + queue_length_gauge.labels(name=queue).set_function(_get_queue_length) + +# Export the amount of different users in the queue +queue_users_gauge = Gauge('marietje_queue_users', 'Users holding a queue at some point', ['name']) +for queue in Queue.objects.all(): + def _get_queue_distinct_users(): + # Ideally, we would use .distinct() here, but it is not supported on + # sqlite3. This makes testing a bit tedious. Also, it does not give me + # that much of confidence that it would also work on mysql. + # Furtermore, we do not expect the queue to be very long at any moment. + return len(set(PlaylistSong.objects + .filter(Q(playlist=queue.playlist_id), Q(state=0) | Q(state=1)) + .values_list('user'))) + queue_users_gauge.labels(name=queue).set_function(_get_queue_distinct_users) def metrics(request):