7848 Add Background Tasks (RQ) to API

This commit is contained in:
Arthur Hanson 2024-11-01 09:38:13 -07:00
parent a8eb455f3e
commit 1ab38c3a45
4 changed files with 44 additions and 1 deletions

View File

@ -1,3 +1,4 @@
from .serializers_.change_logging import * from .serializers_.change_logging import *
from .serializers_.data import * from .serializers_.data import *
from .serializers_.jobs import * from .serializers_.jobs import *
from .serializers_.tasks import *

View File

@ -0,0 +1,20 @@
from rest_framework import serializers
__all__ = (
'BackgroundQueueSerializer',
)
class BackgroundQueueSerializer(serializers.Serializer):
name = serializers.CharField()
jobs = serializers.IntegerField()
oldest_job_timestamp = serializers.CharField()
index = serializers.IntegerField()
connection_kwargs = serializers.DictField()
scheduler_pid = serializers.CharField()
workers = serializers.IntegerField()
finished_jobs = serializers.IntegerField()
started_jobs = serializers.IntegerField()
deferred_jobs = serializers.IntegerField()
failed_jobs = serializers.IntegerField()
scheduled_jobs = serializers.IntegerField()

View File

@ -9,6 +9,7 @@ router.register('data-sources', views.DataSourceViewSet)
router.register('data-files', views.DataFileViewSet) router.register('data-files', views.DataFileViewSet)
router.register('jobs', views.JobViewSet) router.register('jobs', views.JobViewSet)
router.register('object-changes', views.ObjectChangeViewSet) router.register('object-changes', views.ObjectChangeViewSet)
router.register('background-queues', views.BackgroundQueueViewSet, basename='RQ')
app_name = 'core-api' app_name = 'core-api'
urlpatterns = router.urls urlpatterns = router.urls

View File

@ -1,17 +1,21 @@
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from drf_spectacular.types import OpenApiTypes
from drf_spectacular.utils import extend_schema
from rest_framework.decorators import action from rest_framework.decorators import action
from rest_framework.exceptions import PermissionDenied from rest_framework.exceptions import PermissionDenied
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.routers import APIRootView from rest_framework.routers import APIRootView
from rest_framework.viewsets import ReadOnlyModelViewSet from rest_framework.viewsets import ReadOnlyModelViewSet, ViewSet
from core import filtersets from core import filtersets
from core.choices import DataSourceStatusChoices from core.choices import DataSourceStatusChoices
from core.jobs import SyncDataSourceJob from core.jobs import SyncDataSourceJob
from core.models import * from core.models import *
from django_rq.utils import get_statistics
from netbox.api.metadata import ContentTypeMetadata from netbox.api.metadata import ContentTypeMetadata
from netbox.api.viewsets import NetBoxModelViewSet, NetBoxReadOnlyModelViewSet from netbox.api.viewsets import NetBoxModelViewSet, NetBoxReadOnlyModelViewSet
from rest_framework.permissions import IsAdminUser
from . import serializers from . import serializers
@ -71,3 +75,20 @@ class ObjectChangeViewSet(ReadOnlyModelViewSet):
queryset = ObjectChange.objects.valid_models() queryset = ObjectChange.objects.valid_models()
serializer_class = serializers.ObjectChangeSerializer serializer_class = serializers.ObjectChangeSerializer
filterset_class = filtersets.ObjectChangeFilterSet filterset_class = filtersets.ObjectChangeFilterSet
class BackgroundQueueViewSet(ViewSet):
serializer_class = serializers.BackgroundQueueSerializer
permission_classes = [IsAdminUser]
def get_view_name(self):
return "RQ"
@extend_schema(responses={200: OpenApiTypes.OBJECT})
def list(self, request):
"""
Return the UserConfig for the currently authenticated User.
"""
data = get_statistics(run_maintenance_tasks=True)["queues"]
serializer = serializers.BackgroundQueueSerializer(data, many=True)
return Response(serializer.data)