From cbba650a9f68f5b78fc50b5fdb2204e50b89155e Mon Sep 17 00:00:00 2001 From: Arthur Hanson Date: Fri, 22 Nov 2024 09:54:06 -0800 Subject: [PATCH] 7848 queue detail view --- netbox/core/api/serializers_/tasks.py | 6 +++++- netbox/core/api/views.py | 13 +++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/netbox/core/api/serializers_/tasks.py b/netbox/core/api/serializers_/tasks.py index 3260c4dda..53f2b5126 100644 --- a/netbox/core/api/serializers_/tasks.py +++ b/netbox/core/api/serializers_/tasks.py @@ -1,4 +1,5 @@ from rest_framework import serializers +from rest_framework.reverse import reverse __all__ = ( 'BackgroundTaskSerializer', @@ -50,7 +51,7 @@ class BackgroundTaskSerializer(serializers.Serializer): class BackgroundQueueSerializer(serializers.Serializer): name = serializers.CharField() - # Note: Queue names are not url safe so not returning a url field + url = serializers.SerializerMethodField() jobs = serializers.IntegerField() oldest_job_timestamp = serializers.CharField() index = serializers.IntegerField() @@ -62,6 +63,9 @@ class BackgroundQueueSerializer(serializers.Serializer): failed_jobs = serializers.IntegerField() scheduled_jobs = serializers.IntegerField() + def get_url(self, obj): + return reverse('core-api:rqqueue-detail', args=[obj['name']], request=self.context.get("request")) + class BackgroundWorkerSerializer(serializers.Serializer): name = serializers.CharField() diff --git a/netbox/core/api/views.py b/netbox/core/api/views.py index db416dfdf..22c15aa1e 100644 --- a/netbox/core/api/views.py +++ b/netbox/core/api/views.py @@ -119,6 +119,19 @@ class BackgroundQueueViewSet(BaseRQViewSet): def get_data(self): return get_statistics(run_maintenance_tasks=True)["queues"] + @extend_schema(responses={200: OpenApiTypes.OBJECT}) + def retrieve(self, request, name): + data = self.get_data() + if not data: + raise Http404 + + for queue in data: + if queue['name'] == name: + serializer = self.serializer_class(queue, context={'request': request}) + return Response(serializer.data) + + raise Http404 + class BackgroundWorkerViewSet(BaseRQViewSet): """