7848 cleanup

This commit is contained in:
Arthur Hanson 2024-11-01 13:55:19 -07:00
parent c8f13ad2a5
commit 72f974604d
3 changed files with 20 additions and 32 deletions

View File

@ -15,6 +15,7 @@ router.register('background-tasks/(?P<queue_name>[\w-]+)/deferred', views.Backgr
router.register('background-tasks/(?P<queue_name>[\w-]+)/failed', views.BackgroundTaskFailedViewSet, basename='BackgroundTaskFailed')
router.register('background-tasks/(?P<queue_name>[\w-]+)/finished', views.BackgroundTaskFinishedViewSet, basename='BackgroundTaskFinished')
router.register('background-tasks/(?P<queue_name>[\w-]+)/started', views.BackgroundTaskStartedViewSet, basename='BackgroundTaskStarted')
router.register('background-tasks/(?P<queue_name>[\w-]+)/queued', views.BackgroundTaskQueuedViewSet, basename='BackgroundTaskQueued')
app_name = 'core-api'
urlpatterns = router.urls

View File

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

View File

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