From 7b6a846e33fd5cde7cb886cedfd34b3a895e5637 Mon Sep 17 00:00:00 2001 From: Arthur Date: Tue, 23 Jan 2024 13:58:34 -0800 Subject: [PATCH] 14729 background task requeue --- netbox/core/urls.py | 1 + netbox/core/views.py | 26 +++++++++++++++++++++- netbox/templates/core/background_task.html | 6 +---- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/netbox/core/urls.py b/netbox/core/urls.py index 496b1bbbe..12bb56e71 100644 --- a/netbox/core/urls.py +++ b/netbox/core/urls.py @@ -30,6 +30,7 @@ urlpatterns = ( path('background-queues///', views.BackgroundTaskListView.as_view(), name='background_task_list'), path('background-tasks//', views.BackgroundTaskDetailView.as_view(), name='background_task'), path('background-tasks//delete/', views.BackgroundTaskDeleteView.as_view(), name='background_task_delete'), + path('background-tasks//requeue/', views.BackgroundTaskRequeueView.as_view(), name='background_task_requeue'), path('background-workers//', views.WorkerListView.as_view(), name='worker_list'), path('background-worker//', views.WorkerDetailView.as_view(), name='worker'), diff --git a/netbox/core/views.py b/netbox/core/views.py index 5780badb6..78ad783c4 100644 --- a/netbox/core/views.py +++ b/netbox/core/views.py @@ -17,6 +17,7 @@ from netbox.views import generic from netbox.views.generic.base import BaseObjectView from netbox.views.generic.mixins import ActionsMixin, TableMixin +from rq import requeue_job from rq.exceptions import NoSuchJobError from rq.job import Job as RQ_Job from rq.registry import ( @@ -428,7 +429,7 @@ class BackgroundTaskDeleteView(UserPassesTestMixin, View): def get(self, request, job_id): if not is_htmx(request): - return redirect('home') + return redirect(reverse('core:background_queue_list')) form = ConfirmationForm(initial=request.GET) @@ -463,6 +464,29 @@ class BackgroundTaskDeleteView(UserPassesTestMixin, View): return redirect(reverse('core:background_queue_list')) +class BackgroundTaskRequeueView(UserPassesTestMixin, View): + template_name = 'core_background_task_delete.html' + + def test_func(self): + return self.request.user.is_staff + + def get(self, request, job_id): + # all the RQ queues should use the same connection + config = QUEUES_LIST[0] + try: + job = RQ_Job.fetch(job_id, connection=get_redis_connection(config['connection_config']),) + except NoSuchJobError: + raise Http404(_("Job {job_id} not found").format(job_id=job_id)) + + queue_index = QUEUES_MAP[job.origin] + queue = get_queue_by_index(queue_index) + + requeue_job(job_id, connection=queue.connection, serializer=queue.serializer) + messages.success(request, f'You have successfully requeued: {job_id}') + + return redirect(reverse('core:background_task', args=[job_id])) + + class WorkerDetailView(UserPassesTestMixin, View): def test_func(self): diff --git a/netbox/templates/core/background_task.html b/netbox/templates/core/background_task.html index ffbd3b2cc..7516f61b3 100644 --- a/netbox/templates/core/background_task.html +++ b/netbox/templates/core/background_task.html @@ -17,11 +17,7 @@
{% url 'core:background_task_delete' job_id=job.id as delete_url %} {% include "buttons/delete.html" with url=delete_url %} - {% trans "Requeue" %}