14729 background task requeue

This commit is contained in:
Arthur 2024-01-23 13:58:34 -08:00
parent f6db395749
commit 7b6a846e33
3 changed files with 27 additions and 6 deletions

View File

@ -30,6 +30,7 @@ urlpatterns = (
path('background-queues/<int:queue_index>/<str:status>/', views.BackgroundTaskListView.as_view(), name='background_task_list'), path('background-queues/<int:queue_index>/<str:status>/', views.BackgroundTaskListView.as_view(), name='background_task_list'),
path('background-tasks/<str:job_id>/', views.BackgroundTaskDetailView.as_view(), name='background_task'), path('background-tasks/<str:job_id>/', views.BackgroundTaskDetailView.as_view(), name='background_task'),
path('background-tasks/<str:job_id>/delete/', views.BackgroundTaskDeleteView.as_view(), name='background_task_delete'), path('background-tasks/<str:job_id>/delete/', views.BackgroundTaskDeleteView.as_view(), name='background_task_delete'),
path('background-tasks/<str:job_id>/requeue/', views.BackgroundTaskRequeueView.as_view(), name='background_task_requeue'),
path('background-workers/<int:queue_index>/', views.WorkerListView.as_view(), name='worker_list'), path('background-workers/<int:queue_index>/', views.WorkerListView.as_view(), name='worker_list'),
path('background-worker/<str:key>/', views.WorkerDetailView.as_view(), name='worker'), path('background-worker/<str:key>/', views.WorkerDetailView.as_view(), name='worker'),

View File

@ -17,6 +17,7 @@ from netbox.views import generic
from netbox.views.generic.base import BaseObjectView from netbox.views.generic.base import BaseObjectView
from netbox.views.generic.mixins import ActionsMixin, TableMixin from netbox.views.generic.mixins import ActionsMixin, TableMixin
from rq import requeue_job
from rq.exceptions import NoSuchJobError from rq.exceptions import NoSuchJobError
from rq.job import Job as RQ_Job from rq.job import Job as RQ_Job
from rq.registry import ( from rq.registry import (
@ -428,7 +429,7 @@ class BackgroundTaskDeleteView(UserPassesTestMixin, View):
def get(self, request, job_id): def get(self, request, job_id):
if not is_htmx(request): if not is_htmx(request):
return redirect('home') return redirect(reverse('core:background_queue_list'))
form = ConfirmationForm(initial=request.GET) form = ConfirmationForm(initial=request.GET)
@ -463,6 +464,29 @@ class BackgroundTaskDeleteView(UserPassesTestMixin, View):
return redirect(reverse('core:background_queue_list')) 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): class WorkerDetailView(UserPassesTestMixin, View):
def test_func(self): def test_func(self):

View File

@ -17,11 +17,7 @@
<div class="btn-list mb-2"> <div class="btn-list mb-2">
{% url 'core:background_task_delete' job_id=job.id as delete_url %} {% url 'core:background_task_delete' job_id=job.id as delete_url %}
{% include "buttons/delete.html" with url=delete_url %} {% include "buttons/delete.html" with url=delete_url %}
<a href="#" <a href="{% url 'core:background_task_requeue' job.id %}"
hx-get="{% url 'extras:dashboardwidget_add' %}"
hx-target="#htmx-modal-content"
data-bs-toggle="modal"
data-bs-target="#htmx-modal"
class="btn btn-primary" class="btn btn-primary"
> >
<i class="mdi mdi-sync"></i> {% trans "Requeue" %} <i class="mdi mdi-sync"></i> {% trans "Requeue" %}