diff --git a/django_rq/templates/django_rq/job_detail.html b/django_rq/templates/django_rq/job_detail.html index aecba236..2f184108 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 8e13db0e..e91f6a9c 100644 --- a/django_rq/views.py +++ b/django_rq/views.py @@ -520,3 +520,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)