From 8103a821670c9264ea2b57011ad7ceb14498baa2 Mon Sep 17 00:00:00 2001 From: brianlball Date: Fri, 16 Aug 2024 16:39:24 -0500 Subject: [PATCH] add requeue_failed API to requeue the Failed resque jobs but in the :requeued high priority queue --- server/app/controllers/admin_controller.rb | 26 ++++++++++++++++++++++ server/app/views/admin/index.html.erb | 4 ++++ server/config/routes.rb | 1 + 3 files changed, 31 insertions(+) diff --git a/server/app/controllers/admin_controller.rb b/server/app/controllers/admin_controller.rb index fbae95915..d4ca6aec5 100644 --- a/server/app/controllers/admin_controller.rb +++ b/server/app/controllers/admin_controller.rb @@ -35,6 +35,32 @@ def prune_resque_workers end end + # POST /jobs/requeue_failed + def requeue_failed + Rails.logger.warn "Requeueing Failed Jobs to 'requeued' Queue" + + requeued_count = 0 + + Resque::Failure.each do |id, failed_job| + payload = failed_job['payload'] + job_class = payload['class'] + job_args = payload['args'] + + # Requeue the job to the 'requeued' queue + Resque.enqueue_to('requeued', job_class.constantize, *job_args) + # Remove the job from the failed queue + Resque::Failure.remove(id) + requeued_count += 1 + end + + Rails.logger.info "#{requeued_count} jobs successfully requeued to 'requeued' queue by requeue_failed" + + respond_to do |format| + format.html { redirect_to admin_index_path, notice: "#{requeued_count} Resque jobs requeued." } + format.json { render json: { message: "#{requeued_count} jobs requeued to 'requeued' queue" }, status: :ok } + end + end + def backup_database logger.info params write_and_send_data diff --git a/server/app/views/admin/index.html.erb b/server/app/views/admin/index.html.erb index 9bce2a911..b90e519cb 100644 --- a/server/app/views/admin/index.html.erb +++ b/server/app/views/admin/index.html.erb @@ -18,6 +18,10 @@ <%= link_to 'Prune Dead Resque Workers', prune_resque_workers_admin_index_path, method: :post, class: "btn btn-mini btn-danger", data: { confirm: 'Are you sure you want to prune dead Resque workers?' } %> +
+ + <%= link_to 'Requeue Failed Resque Workers', requeue_failed_admin_index_path, method: :post, class: "btn btn-mini btn-danger", data: { confirm: 'Are you sure you want to requeue failed Resque workers?' } %> +
<% end %> diff --git a/server/config/routes.rb b/server/config/routes.rb index c0aeef90f..401872e1a 100644 --- a/server/config/routes.rb +++ b/server/config/routes.rb @@ -100,6 +100,7 @@ get :backup_database post :restore_database post :prune_resque_workers + post :requeue_failed end end