From 666381a582bbae2bc13e9480eb5327ebd5155f8f Mon Sep 17 00:00:00 2001 From: evazion Date: Thu, 4 May 2017 23:20:44 -0500 Subject: [PATCH 1/6] time_ago_in_words_tagged: handle times set in the future. --- app/helpers/application_helper.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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) From cbb15b3e81a5638b363fd08946a693abeae8ff19 Mon Sep 17 00:00:00 2001 From: evazion Date: Thu, 4 May 2017 19:04:18 -0500 Subject: [PATCH 2/6] /delayed_jobs: add '#c-delayed-jobs #a-index' wrapper divs. --- app/views/delayed_jobs/index.html.erb | 82 ++++++++++++++------------- 1 file changed, 43 insertions(+), 39 deletions(-) diff --git a/app/views/delayed_jobs/index.html.erb b/app/views/delayed_jobs/index.html.erb index ce87d68dd..d3716a7e9 100644 --- a/app/views/delayed_jobs/index.html.erb +++ b/app/views/delayed_jobs/index.html.erb @@ -1,42 +1,46 @@ -

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 %> - - - - - - - + +
IDNameHandlerAttemptsPriorityLast errorRun atFailed atQueue
<%= job.id %><%= raw print_name(job) %><%= raw print_handler(job) %><%= job.attempts %><%= job.priority %><%= job.last_error %><%= job.run_at %><%= job.failed_at %><%= job.queue %>
<%= 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 %> +
+
From 9404eeafa153c5cab37208ece3a70f75045e02ce Mon Sep 17 00:00:00 2001 From: evazion Date: Thu, 4 May 2017 23:19:22 -0500 Subject: [PATCH 3/6] /delayed_jobs: reorganize columns; fix column sizes. --- app/views/delayed_jobs/index.html.erb | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/app/views/delayed_jobs/index.html.erb b/app/views/delayed_jobs/index.html.erb index d3716a7e9..3aab89c15 100644 --- a/app/views/delayed_jobs/index.html.erb +++ b/app/views/delayed_jobs/index.html.erb @@ -2,36 +2,32 @@

Delayed Jobs

- +
- + <% if CurrentUser.is_admin? %> <% end %> - - - + <% @delayed_jobs.each do |job| %> - + <% if CurrentUser.is_admin? %> - + <% end %> - - - - - + + + <% end %> From 9c9bf28db4e3aff7a87890e9b0c7aa013b1a7245 Mon Sep 17 00:00:00 2001 From: evazion Date: Thu, 4 May 2017 23:23:52 -0500 Subject: [PATCH 4/6] /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 @@ + @@ -28,6 +29,19 @@ + <% 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 From b17d564e9b56c486a4e8b74988faf4195d4164ca Mon Sep 17 00:00:00 2001 From: evazion Date: Thu, 4 May 2017 23:25:21 -0500 Subject: [PATCH 5/6] /delayed_jobs: order by next-to-run first. --- app/controllers/delayed_jobs_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/delayed_jobs_controller.rb b/app/controllers/delayed_jobs_controller.rb index ef0f3e02f..4b4fa5b1b 100644 --- a/app/controllers/delayed_jobs_controller.rb +++ b/app/controllers/delayed_jobs_controller.rb @@ -3,7 +3,7 @@ class DelayedJobsController < ApplicationController 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 From 1a058ebe9a0566870109c6a19fca3972f7ef251f Mon Sep 17 00:00:00 2001 From: evazion Date: Thu, 4 May 2017 23:46:15 -0500 Subject: [PATCH 6/6] delayed jobs: don't delete failed jobs. --- config/initializers/delayed_jobs.rb | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 config/initializers/delayed_jobs.rb 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
IDQueue NameHandlerAttemptsPriority Last errorRun at Failed atQueueRun at
<%= job.id %><%= job.queue %> <%= raw print_name(job) %><%= raw print_handler(job) %><%= raw print_handler(job) %><%= job.attempts %><%= job.priority %><%= job.last_error %><%= job.run_at %><%= job.failed_at %><%= job.queue %><%= job.last_error %><%= time_ago_in_words_tagged(job.failed_at) if job.failed_at %><%= time_ago_in_words_tagged(job.run_at) %>
Last error Failed at Run at
<%= 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 %> +