From 9c9bf28db4e3aff7a87890e9b0c7aa013b1a7245 Mon Sep 17 00:00:00 2001 From: evazion Date: Thu, 4 May 2017 23:23:52 -0500 Subject: [PATCH] /delayed_jobs: add run, cancel, retry, delete actions. --- app/controllers/delayed_jobs_controller.rb | 36 +++++++++++++++++++++- app/views/delayed_jobs/cancel.js.erb | 1 + app/views/delayed_jobs/destroy.js.erb | 1 + app/views/delayed_jobs/index.html.erb | 14 +++++++++ app/views/delayed_jobs/retry.js.erb | 1 + app/views/delayed_jobs/run.js.erb | 1 + config/routes.rb | 8 ++++- 7 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 app/views/delayed_jobs/cancel.js.erb create mode 100644 app/views/delayed_jobs/destroy.js.erb create mode 100644 app/views/delayed_jobs/retry.js.erb create mode 100644 app/views/delayed_jobs/run.js.erb diff --git a/app/controllers/delayed_jobs_controller.rb b/app/controllers/delayed_jobs_controller.rb index 8f6a8755d..ef0f3e02f 100644 --- a/app/controllers/delayed_jobs_controller.rb +++ b/app/controllers/delayed_jobs_controller.rb @@ -1,7 +1,41 @@ class DelayedJobsController < ApplicationController - respond_to :html, :xml, :json + respond_to :html, :xml, :json, :js + before_filter :admin_only, except: [:index] + def index @delayed_jobs = Delayed::Job.order("created_at desc").paginate(params[:page], :limit => params[:limit]) respond_with(@delayed_jobs) end + + def cancel + @job = Delayed::Job.find(params[:id]) + if !@job.locked_at? + @job.fail! + end + respond_with(@job) + end + + def retry + @job = Delayed::Job.find(params[:id]) + if !@job.locked_at? + @job.update({failed_at: nil, attempts: 0}, without_protection: true) + end + respond_with(@job) + end + + def run + @job = Delayed::Job.find(params[:id]) + if !@job.locked_at? + @job.update(run_at: Time.now) + end + respond_with(@job) + end + + def destroy + @job = Delayed::Job.find(params[:id]) + if !@job.locked_at? + @job.destroy + end + respond_with(@job) + end end diff --git a/app/views/delayed_jobs/cancel.js.erb b/app/views/delayed_jobs/cancel.js.erb new file mode 100644 index 000000000..345366b9b --- /dev/null +++ b/app/views/delayed_jobs/cancel.js.erb @@ -0,0 +1 @@ +location.reload(); diff --git a/app/views/delayed_jobs/destroy.js.erb b/app/views/delayed_jobs/destroy.js.erb new file mode 100644 index 000000000..345366b9b --- /dev/null +++ b/app/views/delayed_jobs/destroy.js.erb @@ -0,0 +1 @@ +location.reload(); diff --git a/app/views/delayed_jobs/index.html.erb b/app/views/delayed_jobs/index.html.erb index 3aab89c15..a3be6de31 100644 --- a/app/views/delayed_jobs/index.html.erb +++ b/app/views/delayed_jobs/index.html.erb @@ -14,6 +14,7 @@ Last error Failed at Run at + @@ -28,6 +29,19 @@ <%= job.last_error %> <%= time_ago_in_words_tagged(job.failed_at) if job.failed_at %> <%= time_ago_in_words_tagged(job.run_at) %> + + <% if CurrentUser.is_admin? %> + <% if job.locked_at? %> + Running + <% elsif job.failed? %> + <%= link_to "Retry", retry_delayed_job_path(job), method: :put, remote: true %> | + <%= link_to "Delete", delayed_job_path(job), method: :delete, remote: true %> + <% else %> + <%= link_to "Run", run_delayed_job_path(job), method: :put, remote: true %> | + <%= link_to "Cancel", cancel_delayed_job_path(job), method: :put, remote: true %> + <% end %> + <% end %> + <% end %> diff --git a/app/views/delayed_jobs/retry.js.erb b/app/views/delayed_jobs/retry.js.erb new file mode 100644 index 000000000..345366b9b --- /dev/null +++ b/app/views/delayed_jobs/retry.js.erb @@ -0,0 +1 @@ +location.reload(); diff --git a/app/views/delayed_jobs/run.js.erb b/app/views/delayed_jobs/run.js.erb new file mode 100644 index 000000000..345366b9b --- /dev/null +++ b/app/views/delayed_jobs/run.js.erb @@ -0,0 +1 @@ +location.reload(); diff --git a/config/routes.rb b/config/routes.rb index 45cddb0fc..2ecd63bb4 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -110,7 +110,13 @@ Rails.application.routes.draw do get :posts end end - resources :delayed_jobs, :only => [:index] + resources :delayed_jobs, :only => [:index, :destroy] do + member do + put :run + put :retry + put :cancel + end + end resources :dmails, :only => [:new, :create, :index, :show, :destroy] do collection do get :search