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
-
-
-
- | ID |
- Name |
- <% if CurrentUser.is_admin? %>
- Handler |
- <% end %>
- Attempts |
- Priority |
- Last error |
- Run at |
- Failed at |
- Queue |
-
-
-
- <% @delayed_jobs.each do |job| %>
-
- | <%= job.id %> |
- <%= raw print_name(job) %> |
- <% if CurrentUser.is_admin? %>
- <%= raw print_handler(job) %> |
+
+
+
+ | Queue |
+ Name |
+ <% if CurrentUser.is_admin? %>
+ Handler |
+ <% end %>
+ Attempts |
+ Last error |
+ Failed at |
+ Run at |
+ |
+
+
+
+ <% @delayed_jobs.each do |job| %>
+
+ | <%= job.queue %> |
+ <%= raw print_name(job) %> |
+ <% if CurrentUser.is_admin? %>
+ <%= raw print_handler(job) %> |
+ <% end %>
+ <%= 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 %>
+ |
+
<% 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