@@ -39,6 +39,15 @@ class JobsController < ApplicationController |
||
| 39 | 39 |
end |
| 40 | 40 |
end |
| 41 | 41 |
|
| 42 |
+ def retry_queued |
|
| 43 |
+ @jobs = Delayed::Job.awaiting_retry.update_all(run_at: Time.zone.now) |
|
| 44 |
+ |
|
| 45 |
+ respond_to do |format| |
|
| 46 |
+ format.html { redirect_to jobs_path, notice: "Queued jobs getting retried." }
|
|
| 47 |
+ format.json { head :no_content }
|
|
| 48 |
+ end |
|
| 49 |
+ end |
|
| 50 |
+ |
|
| 42 | 51 |
def destroy_failed |
| 43 | 52 |
Delayed::Job.where.not(failed_at: nil).delete_all |
| 44 | 53 |
|
@@ -80,6 +80,10 @@ |
||
| 80 | 80 |
<span class="glyphicon glyphicon-trash"></span> Remove failed jobs |
| 81 | 81 |
<% end %> |
| 82 | 82 |
|
| 83 |
+ <%= link_to retry_queued_jobs_path, class: "btn btn-default", method: :post do %> |
|
| 84 |
+ <span class="glyphicon glyphicon-refresh"></span> Retry queued jobs |
|
| 85 |
+ <% end %> |
|
| 86 |
+ |
|
| 83 | 87 |
<%= link_to destroy_all_jobs_path, class: "btn btn-default", method: :delete, data: { confirm: "Are you sure you want to delete ALL pending jobs for all Huginn users?" } do %>
|
| 84 | 88 |
<span class="glyphicon glyphicon-remove"></span> Remove all jobs |
| 85 | 89 |
<% end %> |
@@ -12,7 +12,7 @@ Delayed::Worker.logger = Rails.logger |
||
| 12 | 12 |
|
| 13 | 13 |
class Delayed::Job |
| 14 | 14 |
scope :pending, ->{ where("locked_at IS NULL AND attempts = 0") }
|
| 15 |
- scope :awaiting_retry, ->{ where("failed_at IS NULL AND attempts > 0") }
|
|
| 15 |
+ scope :awaiting_retry, ->{ where("failed_at IS NULL AND attempts > 0 AND locked_at IS NULL") }
|
|
| 16 | 16 |
scope :failed, -> { where("failed_at IS NOT NULL") }
|
| 17 | 17 |
end |
| 18 | 18 |
|
@@ -63,6 +63,7 @@ Huginn::Application.routes.draw do |
||
| 63 | 63 |
collection do |
| 64 | 64 |
delete :destroy_failed |
| 65 | 65 |
delete :destroy_all |
| 66 |
+ post :retry_queued |
|
| 66 | 67 |
end |
| 67 | 68 |
end |
| 68 | 69 |
|
@@ -92,4 +92,18 @@ describe JobsController do |
||
| 92 | 92 |
expect(Delayed::Job.find(@running.id)).to be |
| 93 | 93 |
end |
| 94 | 94 |
end |
| 95 |
+ |
|
| 96 |
+ describe "POST retry_queued" do |
|
| 97 |
+ before do |
|
| 98 |
+ @not_running = Delayed::Job.create(run_at: Time.zone.now - 1.hour) |
|
| 99 |
+ @not_running.update_attribute(:attempts, 1) |
|
| 100 |
+ sign_in users(:jane) |
|
| 101 |
+ end |
|
| 102 |
+ |
|
| 103 |
+ it "run the queued job" do |
|
| 104 |
+ expect(Delayed::Job.last.run_at.to_s).not_to eq(Time.zone.now.to_s) |
|
| 105 |
+ post :retry_queued |
|
| 106 |
+ expect(Delayed::Job.last.run_at.to_s).to eq(Time.zone.now.to_s) |
|
| 107 |
+ end |
|
| 108 |
+ end |
|
| 95 | 109 |
end |