From 72f974604dfa0599806690c360c5ddae617dc918 Mon Sep 17 00:00:00 2001 From: Arthur Hanson Date: Fri, 1 Nov 2024 13:55:19 -0700 Subject: [PATCH] 7848 cleanup --- netbox/core/api/urls.py | 1 + netbox/core/api/views.py | 14 ++++++++++++++ netbox/core/views.py | 37 +++++-------------------------------- 3 files changed, 20 insertions(+), 32 deletions(-) diff --git a/netbox/core/api/urls.py b/netbox/core/api/urls.py index 7ccfd3517..a29e2b393 100644 --- a/netbox/core/api/urls.py +++ b/netbox/core/api/urls.py @@ -15,6 +15,7 @@ router.register('background-tasks/(?P[\w-]+)/deferred', views.Backgr router.register('background-tasks/(?P[\w-]+)/failed', views.BackgroundTaskFailedViewSet, basename='BackgroundTaskFailed') router.register('background-tasks/(?P[\w-]+)/finished', views.BackgroundTaskFinishedViewSet, basename='BackgroundTaskFinished') router.register('background-tasks/(?P[\w-]+)/started', views.BackgroundTaskStartedViewSet, basename='BackgroundTaskStarted') +router.register('background-tasks/(?P[\w-]+)/queued', views.BackgroundTaskQueuedViewSet, basename='BackgroundTaskQueued') app_name = 'core-api' urlpatterns = router.urls diff --git a/netbox/core/api/views.py b/netbox/core/api/views.py index b2b82ff3a..a19a7120a 100644 --- a/netbox/core/api/views.py +++ b/netbox/core/api/views.py @@ -147,3 +147,17 @@ class BackgroundTaskFinishedViewSet(BaseBackgroundTaskViewSet): class BackgroundTaskStartedViewSet(BaseBackgroundTaskViewSet): registry = "started" + + +class BackgroundTaskQueuedViewSet(BaseBackgroundTaskViewSet): + registry = "queued" + + @extend_schema(responses={200: OpenApiTypes.OBJECT}) + def list(self, request, queue_name): + """ + Return the UserConfig for the currently authenticated User. + """ + queue = get_queue(queue_name) + data = queue.get_jobs() + serializer = serializers.BackgroundTaskSerializer(data, many=True) + return Response(serializer.data) diff --git a/netbox/core/views.py b/netbox/core/views.py index 3c5319626..6d15efed4 100644 --- a/netbox/core/views.py +++ b/netbox/core/views.py @@ -14,16 +14,17 @@ from django.utils.translation import gettext_lazy as _ from django.views.generic import View from django_rq.queues import get_connection, get_queue_by_index, get_redis_connection from django_rq.settings import QUEUES_MAP, QUEUES_LIST -from django_rq.utils import get_jobs, get_statistics, stop_jobs +from django_rq.utils import get_statistics, stop_jobs from rq import requeue_job from rq.exceptions import NoSuchJobError -from rq.job import Job as RQ_Job, JobStatus as RQJobStatus +from rq.job import Job as RQ_Job from rq.registry import ( - DeferredJobRegistry, FailedJobRegistry, FinishedJobRegistry, ScheduledJobRegistry, StartedJobRegistry, + DeferredJobRegistry, FinishedJobRegistry, ScheduledJobRegistry, ) from rq.worker import Worker from rq.worker_registration import clean_worker_registry +from core.utils import get_rq_jobs_from_status from netbox.config import get_config, PARAMS from netbox.views import generic from netbox.views.generic.base import BaseObjectView @@ -347,40 +348,12 @@ class BackgroundTaskListView(TableMixin, BaseRQView): table = tables.BackgroundTaskTable def get_table_data(self, request, queue, status): - jobs = [] # Call get_jobs() to returned queued tasks if status == RQJobStatus.QUEUED: return queue.get_jobs() - # For other statuses, determine the registry to list (or raise a 404 for invalid statuses) - try: - registry_cls = { - RQJobStatus.STARTED: StartedJobRegistry, - RQJobStatus.DEFERRED: DeferredJobRegistry, - RQJobStatus.FINISHED: FinishedJobRegistry, - RQJobStatus.FAILED: FailedJobRegistry, - RQJobStatus.SCHEDULED: ScheduledJobRegistry, - }[status] - except KeyError: - raise Http404 - registry = registry_cls(queue.name, queue.connection) - - job_ids = registry.get_job_ids() - if status != RQJobStatus.DEFERRED: - jobs = get_jobs(queue, job_ids, registry) - else: - # Deferred jobs require special handling - for job_id in job_ids: - try: - jobs.append(RQ_Job.fetch(job_id, connection=queue.connection, serializer=queue.serializer)) - except NoSuchJobError: - pass - - if jobs and status == RQJobStatus.SCHEDULED: - for job in jobs: - job.scheduled_at = registry.get_scheduled_time(job) - + jobs = get_rq_jobs_from_status(queue, status) return jobs def get(self, request, queue_index, status):