From 644e654fefb5ff7cf426a94675271aaf035f66f6 Mon Sep 17 00:00:00 2001 From: Daan Sprenkels Date: Mon, 9 Apr 2018 19:19:22 +0200 Subject: [PATCH] metrics: Add queue length in seconds --- marietje/metrics/views.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/marietje/metrics/views.py b/marietje/metrics/views.py index 3fd28f7..fae3957 100644 --- a/marietje/metrics/views.py +++ b/marietje/metrics/views.py @@ -6,16 +6,25 @@ from queues.models import Queue, PlaylistSong # Export queue length queue_length_gauge = Gauge('marietje_queue_length', 'Marietje queue length', ['name']) +# Export the queue duration +queue_duration_gauge = Gauge('marietje_queue_duration', 'Marietje queue duration in seconds', ['name']) +# 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_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_duration(): + playlist_songs = (PlaylistSong.objects + .filter(Q(playlist=queue.playlist_id), Q(state=0) | Q(state=1)) + .select_related('song') + .all()) + return sum(ps.song.duration for ps in playlist_songs) + 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 @@ -24,6 +33,9 @@ for queue in Queue.objects.all(): return len(set(PlaylistSong.objects .filter(Q(playlist=queue.playlist_id), Q(state=0) | Q(state=1)) .values_list('user'))) + + queue_length_gauge.labels(name=queue).set_function(_get_queue_length) + queue_duration_gauge.labels(name=queue).set_function(_get_queue_duration) queue_users_gauge.labels(name=queue).set_function(_get_queue_distinct_users)