diff --git a/app/controllers/delayed_jobs_controller.rb b/app/controllers/delayed_jobs_controller.rb index 8f6a8755d..4b4fa5b1b 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]) + @delayed_jobs = Delayed::Job.order("run_at asc").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/helpers/application_helper.rb b/app/helpers/application_helper.rb index 379c46a38..0d6a57ccf 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -90,7 +90,11 @@ module ApplicationHelper end def time_ago_in_words_tagged(time) - raw time_tag(time_ago_in_words(time) + " ago", time) + if time.past? + raw time_tag(time_ago_in_words(time) + " ago", time) + else + raw time_tag("in " + distance_of_time_in_words(Time.now, time), time) + end end def compact_time(time) 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 ce87d68dd..a3be6de31 100644 --- a/app/views/delayed_jobs/index.html.erb +++ b/app/views/delayed_jobs/index.html.erb @@ -1,42 +1,56 @@ -

Delayed Jobs

+
+
+

Delayed Jobs

- - - - - - <% if CurrentUser.is_admin? %> - - <% end %> - - - - - - - - - - <% @delayed_jobs.each do |job| %> - - - - <% if CurrentUser.is_admin? %> - +
IDNameHandlerAttemptsPriorityLast errorRun atFailed atQueue
<%= job.id %><%= raw print_name(job) %><%= raw print_handler(job) %>
+ + + + + <% if CurrentUser.is_admin? %> + + <% end %> + + + + + + + + + <% @delayed_jobs.each do |job| %> + + + + <% if CurrentUser.is_admin? %> + + <% end %> + + + + + + <% end %> - - - - - - - + +
QueueNameHandlerAttemptsLast errorFailed atRun at
<%= job.queue %><%= raw print_name(job) %><%= raw print_handler(job) %><%= job.attempts %><%= 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 %> +
<%= job.attempts %><%= job.priority %><%= job.last_error %><%= job.run_at %><%= job.failed_at %><%= job.queue %>
+ + <%= numbered_paginator(@delayed_jobs) %> + + <% content_for(:page_title) do %> + Delayed Jobs - <%= Danbooru.config.app_name %> <% end %> - - - -<%= numbered_paginator(@delayed_jobs) %> - -<% content_for(:page_title) do %> - Delayed Jobs - <%= Danbooru.config.app_name %> -<% 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/initializers/delayed_jobs.rb b/config/initializers/delayed_jobs.rb new file mode 100644 index 000000000..fe144d69c --- /dev/null +++ b/config/initializers/delayed_jobs.rb @@ -0,0 +1,2 @@ +Delayed::Worker.default_queue_name = "default" +Delayed::Worker.destroy_failed_jobs = false 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