mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-29 11:56:25 -06:00
7848 review comments - get all tasks
This commit is contained in:
parent
3ec3bef5fa
commit
c6482d88e2
@ -9,6 +9,7 @@ __all__ = (
|
|||||||
|
|
||||||
class BackgroundTaskSerializer(serializers.Serializer):
|
class BackgroundTaskSerializer(serializers.Serializer):
|
||||||
id = serializers.CharField()
|
id = serializers.CharField()
|
||||||
|
url = serializers.HyperlinkedIdentityField(view_name='core-api:rqtask-detail', lookup_field='id', lookup_url_kwarg='pk')
|
||||||
description = serializers.CharField()
|
description = serializers.CharField()
|
||||||
origin = serializers.CharField()
|
origin = serializers.CharField()
|
||||||
func_name = serializers.CharField()
|
func_name = serializers.CharField()
|
||||||
@ -59,8 +60,8 @@ class BackgroundQueueSerializer(serializers.Serializer):
|
|||||||
|
|
||||||
|
|
||||||
class BackgroundWorkerSerializer(serializers.Serializer):
|
class BackgroundWorkerSerializer(serializers.Serializer):
|
||||||
name = serializers.HyperlinkedIdentityField(view_name='core-api:rqworker-detail', lookup_field='name')
|
name = serializers.CharField()
|
||||||
|
url = serializers.HyperlinkedIdentityField(view_name='core-api:rqworker-detail', lookup_field='name')
|
||||||
state = serializers.SerializerMethodField()
|
state = serializers.SerializerMethodField()
|
||||||
birth_date = serializers.CharField()
|
birth_date = serializers.CharField()
|
||||||
queue_names = serializers.ListField(child=serializers.CharField())
|
queue_names = serializers.ListField(child=serializers.CharField())
|
||||||
|
@ -12,7 +12,7 @@ router.register('jobs', views.JobViewSet)
|
|||||||
router.register('object-changes', views.ObjectChangeViewSet)
|
router.register('object-changes', views.ObjectChangeViewSet)
|
||||||
router.register('background-queues', views.QueueViewSet, basename='rqqueue')
|
router.register('background-queues', views.QueueViewSet, basename='rqqueue')
|
||||||
router.register('background-workers', views.WorkerViewSet, basename='rqworker')
|
router.register('background-workers', views.WorkerViewSet, basename='rqworker')
|
||||||
router.register('background-tasks/(?P<queue_name>.+)/', views.TaskViewSet, basename='rqtask')
|
# router.register('background-tasks/(?P<queue_name>.+)/', views.TaskViewSet, basename='rqtask')
|
||||||
router.register('background-task', views.TaskDetailViewSet, basename='rqtaskdetail')
|
router.register('background-tasks', views.TaskViewSet, basename='rqtask')
|
||||||
|
|
||||||
urlpatterns = router.urls
|
urlpatterns = router.urls
|
||||||
|
@ -13,7 +13,7 @@ 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 core.utils import delete_rq_job, enqueue_rq_job, get_rq_jobs_from_status, requeue_rq_job, stop_rq_job
|
from core.utils import delete_rq_job, enqueue_rq_job, get_rq_jobs, get_rq_jobs_from_status, requeue_rq_job, stop_rq_job
|
||||||
from django_rq.queues import get_queue, get_redis_connection
|
from django_rq.queues import get_queue, get_redis_connection
|
||||||
from django_rq.utils import get_statistics
|
from django_rq.utils import get_statistics
|
||||||
from django_rq.settings import QUEUES_LIST
|
from django_rq.settings import QUEUES_LIST
|
||||||
@ -92,6 +92,9 @@ class BaseRQListView(viewsets.ViewSet):
|
|||||||
permission_classes = [IsAdminUser]
|
permission_classes = [IsAdminUser]
|
||||||
serializer_class = None
|
serializer_class = None
|
||||||
|
|
||||||
|
def get_data(self):
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
@extend_schema(responses={200: OpenApiTypes.OBJECT})
|
@extend_schema(responses={200: OpenApiTypes.OBJECT})
|
||||||
def list(self, request):
|
def list(self, request):
|
||||||
data = self.get_data()
|
data = self.get_data()
|
||||||
@ -115,6 +118,17 @@ class QueueViewSet(BaseRQListView):
|
|||||||
def get_data(self):
|
def get_data(self):
|
||||||
return get_statistics(run_maintenance_tasks=True)["queues"]
|
return get_statistics(run_maintenance_tasks=True)["queues"]
|
||||||
|
|
||||||
|
def retrieve(self, request, name):
|
||||||
|
queues = self.get_data()
|
||||||
|
if not queues:
|
||||||
|
raise Http404
|
||||||
|
|
||||||
|
for queue in queues:
|
||||||
|
if queue.name == name:
|
||||||
|
return Response(self.serializer_class(data, context={'request': request}))
|
||||||
|
|
||||||
|
raise Http404
|
||||||
|
|
||||||
|
|
||||||
class WorkerViewSet(BaseRQListView):
|
class WorkerViewSet(BaseRQListView):
|
||||||
"""
|
"""
|
||||||
@ -142,14 +156,40 @@ class WorkerViewSet(BaseRQListView):
|
|||||||
return Response(serializer.data)
|
return Response(serializer.data)
|
||||||
|
|
||||||
|
|
||||||
class TaskDetailViewSet(viewsets.ViewSet):
|
class TaskViewSet(viewsets.ViewSet):
|
||||||
"""
|
"""
|
||||||
Retrieve the details of the specified RQ Task.
|
Retrieve the details of the specified RQ Task.
|
||||||
"""
|
"""
|
||||||
permission_classes = [IsAdminUser]
|
permission_classes = [IsAdminUser]
|
||||||
|
|
||||||
def get_view_name(self):
|
def get_view_name(self):
|
||||||
return "Background Task"
|
return "Background Tasks"
|
||||||
|
|
||||||
|
def get_response(self, request, queue_name, status=None):
|
||||||
|
try:
|
||||||
|
queue = get_queue(queue_name)
|
||||||
|
except KeyError:
|
||||||
|
raise Http404
|
||||||
|
|
||||||
|
if status:
|
||||||
|
data = get_rq_jobs_from_status(queue, status)
|
||||||
|
else:
|
||||||
|
data = queue.get_jobs()
|
||||||
|
|
||||||
|
paginator = LimitOffsetListPagination()
|
||||||
|
data = paginator.paginate_list(data, request)
|
||||||
|
|
||||||
|
serializer = serializers.BackgroundTaskSerializer(data, many=True, context={'request': request})
|
||||||
|
return Response(serializer.data)
|
||||||
|
|
||||||
|
@extend_schema(responses={200: OpenApiTypes.OBJECT})
|
||||||
|
def list(self, request):
|
||||||
|
data = get_rq_jobs()
|
||||||
|
paginator = LimitOffsetListPagination()
|
||||||
|
data = paginator.paginate_list(data, request)
|
||||||
|
|
||||||
|
serializer = serializers.BackgroundTaskSerializer(data, many=True, context={'request': request})
|
||||||
|
return Response(serializer.data)
|
||||||
|
|
||||||
def get_task_from_id(self, task_id):
|
def get_task_from_id(self, task_id):
|
||||||
config = QUEUES_LIST[0]
|
config = QUEUES_LIST[0]
|
||||||
@ -187,54 +227,3 @@ class TaskDetailViewSet(viewsets.ViewSet):
|
|||||||
return HttpResponse(status=200)
|
return HttpResponse(status=200)
|
||||||
else:
|
else:
|
||||||
return HttpResponse(status=204)
|
return HttpResponse(status=204)
|
||||||
|
|
||||||
|
|
||||||
class TaskViewSet(viewsets.ViewSet):
|
|
||||||
"""
|
|
||||||
Background Task API.
|
|
||||||
"""
|
|
||||||
permission_classes = [IsAdminUser]
|
|
||||||
|
|
||||||
def get_view_name(self):
|
|
||||||
return "Background Tasks"
|
|
||||||
|
|
||||||
def get_response(self, request, queue_name, status=None):
|
|
||||||
try:
|
|
||||||
queue = get_queue(queue_name)
|
|
||||||
except KeyError:
|
|
||||||
raise Http404
|
|
||||||
|
|
||||||
if status:
|
|
||||||
data = get_rq_jobs_from_status(queue, status)
|
|
||||||
else:
|
|
||||||
data = queue.get_jobs()
|
|
||||||
|
|
||||||
paginator = LimitOffsetListPagination()
|
|
||||||
data = paginator.paginate_list(data, request)
|
|
||||||
|
|
||||||
serializer = serializers.BackgroundTaskSerializer(data, many=True, context={'request': request})
|
|
||||||
return Response(serializer.data)
|
|
||||||
|
|
||||||
@extend_schema(responses={200: OpenApiTypes.OBJECT})
|
|
||||||
def list(self, request, queue_name):
|
|
||||||
return self.get_response(request, queue_name, None)
|
|
||||||
|
|
||||||
@action(methods=["GET"], detail=False)
|
|
||||||
def deferred(self, request, queue_name):
|
|
||||||
return self.get_response(request, queue_name, "deferred")
|
|
||||||
|
|
||||||
@action(methods=["GET"], detail=False)
|
|
||||||
def failed(self, request, queue_name):
|
|
||||||
return self.get_response(request, queue_name, "failed")
|
|
||||||
|
|
||||||
@action(methods=["GET"], detail=False)
|
|
||||||
def finished(self, request, queue_name):
|
|
||||||
return self.get_response(request, queue_name, "finished")
|
|
||||||
|
|
||||||
@action(methods=["GET"], detail=False)
|
|
||||||
def started(self, request, queue_name):
|
|
||||||
return self.get_response(request, queue_name, "started")
|
|
||||||
|
|
||||||
@action(methods=["GET"], detail=False)
|
|
||||||
def queued(self, request, queue_name):
|
|
||||||
return self.get_response(request, queue_name, None)
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django_rq.queues import get_queue_by_index, get_redis_connection
|
from django_rq.queues import get_queue, get_queue_by_index, get_redis_connection
|
||||||
from django_rq.settings import QUEUES_MAP, QUEUES_LIST
|
from django_rq.settings import QUEUES_MAP, QUEUES_LIST
|
||||||
from django_rq.utils import get_jobs, stop_jobs
|
from django_rq.utils import get_jobs, stop_jobs
|
||||||
from rq import requeue_job
|
from rq import requeue_job
|
||||||
@ -51,6 +51,16 @@ def get_rq_jobs_from_status(queue, status):
|
|||||||
return jobs
|
return jobs
|
||||||
|
|
||||||
|
|
||||||
|
def get_rq_jobs():
|
||||||
|
jobs = set()
|
||||||
|
|
||||||
|
for queue in QUEUES_LIST:
|
||||||
|
queue = get_queue(queue['name'])
|
||||||
|
jobs.update(queue.get_jobs())
|
||||||
|
|
||||||
|
return list(jobs)
|
||||||
|
|
||||||
|
|
||||||
def delete_rq_job(job_id):
|
def delete_rq_job(job_id):
|
||||||
"""
|
"""
|
||||||
Deletes the specified RQ job.
|
Deletes the specified RQ job.
|
||||||
|
Loading…
Reference in New Issue
Block a user