mirror of
https://gitlab.science.ru.nl/technicie/MarietjeDjango.git
synced 2025-12-09 19:52:20 +01:00
Add basic metrics export
This commit is contained in:
@ -12,11 +12,16 @@ from django.shortcuts import get_object_or_404
|
||||
from django.views.decorators.http import require_http_methods
|
||||
from django.conf import settings
|
||||
from mutagen import File
|
||||
from prometheus_client import Counter
|
||||
|
||||
|
||||
from marietje.utils import song_to_dict, playlist_song_to_dict, send_to_bertha
|
||||
from queues.models import PlaylistSong, QueueCommand
|
||||
from songs.models import Song
|
||||
|
||||
request_counter = Counter('marietje_requests', 'Queue requests on marietje', ['queue'])
|
||||
upload_counter = Counter('marietje_uploads', 'Songs uploaded to marietje')
|
||||
|
||||
|
||||
def api_auth_required(view_func):
|
||||
@wraps(view_func)
|
||||
@ -215,6 +220,7 @@ def request(request):
|
||||
queue = request.user.queue
|
||||
song = get_object_or_404(Song, id=request.POST.get('id'), deleted=False)
|
||||
if queue.request(song, request.user):
|
||||
request_counter.labels(queue=queue.name).inc()
|
||||
return JsonResponse({
|
||||
'success': True
|
||||
})
|
||||
@ -265,6 +271,7 @@ def upload(request):
|
||||
song = Song(user=request.user, artist=artists[i], title=titles[i], hash=hash, duration=duration)
|
||||
song.save()
|
||||
|
||||
upload_counter.inc()
|
||||
return JsonResponse({'success': True})
|
||||
|
||||
|
||||
|
||||
@ -15,6 +15,7 @@ Including another URLconf
|
||||
"""
|
||||
from django.conf.urls import include, url
|
||||
from django.contrib import admin
|
||||
from metrics.views import metrics
|
||||
from queues.views import index
|
||||
from django.contrib.auth.views import login, logout
|
||||
from .views import register, activate, forgotpassword, resetpassword
|
||||
@ -34,4 +35,5 @@ urlpatterns = [
|
||||
url(r'^api/', include('api.urls')),
|
||||
url(r'^playerapi/', include('playerapi.urls')),
|
||||
url(r'^stats/', include('stats.urls')),
|
||||
url(r'^metrics', metrics, name='metrics'),
|
||||
]
|
||||
|
||||
0
marietje/metrics/__init__.py
Normal file
0
marietje/metrics/__init__.py
Normal file
3
marietje/metrics/admin.py
Normal file
3
marietje/metrics/admin.py
Normal file
@ -0,0 +1,3 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
5
marietje/metrics/apps.py
Normal file
5
marietje/metrics/apps.py
Normal file
@ -0,0 +1,5 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class MetricsConfig(AppConfig):
|
||||
name = 'metrics'
|
||||
0
marietje/metrics/migrations/__init__.py
Normal file
0
marietje/metrics/migrations/__init__.py
Normal file
3
marietje/metrics/models.py
Normal file
3
marietje/metrics/models.py
Normal file
@ -0,0 +1,3 @@
|
||||
from django.db import models
|
||||
|
||||
# Create your models here.
|
||||
3
marietje/metrics/tests.py
Normal file
3
marietje/metrics/tests.py
Normal file
@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
18
marietje/metrics/views.py
Normal file
18
marietje/metrics/views.py
Normal file
@ -0,0 +1,18 @@
|
||||
from prometheus_client import generate_latest, Gauge
|
||||
|
||||
from django.db.models import Q
|
||||
from django.http import HttpResponse
|
||||
|
||||
from queues.models import Queue, PlaylistSong
|
||||
|
||||
# Export queue length
|
||||
g = 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)
|
||||
|
||||
|
||||
def metrics(request):
|
||||
return HttpResponse(generate_latest(), content_type="text/plain")
|
||||
@ -1,3 +1,4 @@
|
||||
django
|
||||
mutagen
|
||||
argon2-cffi
|
||||
prometheus_client
|
||||
|
||||
Reference in New Issue
Block a user