metrics: Add users in queue

This commit is contained in:
Daan Sprenkels
2018-04-09 17:00:37 +02:00
parent 17858c4aae
commit 126372a758

View File

@ -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):