From 2bb29bc3c152506d6aa848d4fdb2c1da976cbe06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Telepovsk=C3=BD?= Date: Mon, 30 Nov 2020 19:20:40 +0100 Subject: [PATCH] option to update job timeout according to settings --- django_rq/templates/django_rq/job_detail.html | 4 ++- django_rq/urls.py | 2 ++ django_rq/views.py | 25 +++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/django_rq/templates/django_rq/job_detail.html b/django_rq/templates/django_rq/job_detail.html index 1a284b06..e9c34106 100644 --- a/django_rq/templates/django_rq/job_detail.html +++ b/django_rq/templates/django_rq/job_detail.html @@ -52,7 +52,9 @@
-
{{ job.timeout }}
+
{{ job.timeout }} +
Update timeout +
diff --git a/django_rq/urls.py b/django_rq/urls.py index 7fc4601d..e2abcea0 100644 --- a/django_rq/urls.py +++ b/django_rq/urls.py @@ -40,4 +40,6 @@ views.requeue_job_view, name='rq_requeue_job'), re_path(r'^queues/(?P[\d]+)/(?P[-\w\.\:\$]+)/enqueue/$', views.enqueue_job, name='rq_enqueue_job'), + re_path(r'^queues/(?P[\d]+)/(?P[-\w\.\:\$]+)/update_timeout/$', + views.update_timeout_job, name='rq_update_timeout_job'), ] diff --git a/django_rq/views.py b/django_rq/views.py index 70bc2681..98352af9 100644 --- a/django_rq/views.py +++ b/django_rq/views.py @@ -497,3 +497,28 @@ def enqueue_job(request, queue_index, job_id): 'queue': queue, } return render(request, 'django_rq/delete_job.html', context_data) + + +@staff_member_required +def update_timeout_job(request, queue_index, job_id): + """ Update timeout of job by queue settings + """ + queue_index = int(queue_index) + queue = get_queue_by_index(queue_index) + job = Job.fetch(job_id, connection=queue.connection) + + queue_name = queue.name + old_timeout = job.timeout + + from .settings import QUEUES + default_timeout = QUEUES[queue_name].get('DEFAULT_TIMEOUT', None) + new_timeout = default_timeout + + if old_timeout != new_timeout: + job.timeout = new_timeout + job.save() + messages.success(request, 'You have successfully changed timeout of job from %d to %s' % (old_timeout, new_timeout)) + else: + messages.info(request, 'Job has already default queue timeout') + + return redirect('rq_job_detail', queue_index, job_id)