Skip to content

Commit 9b3acc7

Browse files
author
Tyler Knappe
committed
Ajaxify retry and remove links in Failure queue. Prevent expensive page reloads when removing or retrying links.
1 parent 10f2d2e commit 9b3acc7

File tree

4 files changed

+47
-7
lines changed

4 files changed

+47
-7
lines changed

app/controllers/resque_web/failures_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ def index
1212
# remove an individual job from the failure queue
1313
def destroy
1414
Resque::Failure.remove(params[:id])
15-
redirect_to failures_path(redirect_params)
15+
render json: {:success => true}, status: 200
1616
end
1717

1818
# destroy all jobs from the failure queue

app/views/resque_web/failures/_failed_job.html.erb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<li>
1+
<li class="failed-<%= id %>">
22
<dl>
33
<% if job.nil? %>
44
<dt>Error</dt>
@@ -17,9 +17,9 @@
1717
</div>
1818
<% else %>
1919
<div class="controls">
20-
<%= link_to "Retry", retry_failure_path(:queue=>failure_queue,:id=>id), :method => :put %>
20+
<%= link_to "Retry", retry_failure_path(:queue=>failure_queue,:id=>id), :data => {'job-id' => id }, :method => :put, :class => 'retry' %>
2121
or
22-
<%= link_to "Remove", failure_path(:queue=>failure_queue,:id=>id), :method => :delete %>
22+
<%= link_to "Remove", failure_path(:queue=>failure_queue,:id=>id), :data => {'job-id' => id }, :method => :delete, :class => 'remove' %>
2323
</div>
2424
<% end %>
2525
</dd>

app/views/resque_web/failures/index.html.erb

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
<% else %>
44
<h1>Failed Jobs <%= "on '#{params[:queue]}'" if params[:queue] %> <%= "with class '#{params[:class]}'" if params[:class] %></h1>
55
<% end %>
6-
76
<% unless failure_size.zero? %>
87
<%= form_tag(destroy_all_failures_path(queue: params[:queue]), method: :delete) do %>
98
<%= submit_tag "Clear #{failure_queue_name} Jobs", class: 'btn btn-danger', data: { confirm: "Are you sure you want to clear ALL #{failure_queue_name.downcase} jobs?" } %>
@@ -21,7 +20,6 @@
2120
<%= render partial: 'overview' %>
2221
<% else %>
2322
<p class="sub">Showing <%= failure_start_at %> to <%= failure_end_at %> of <b><%= failure_size %></b> jobs</p>
24-
2523
<ul class="failed">
2624
<% each_failure do |id, job| %>
2725
<%= render partial: 'failed_job', locals: { id: id, job: job } %>
@@ -30,3 +28,45 @@
3028

3129
<%= pagination(start: failure_start_at, total: failure_size) unless params[:class] %>
3230
<% end %>
31+
32+
<script type="text/javascript">
33+
$('.controls a').on('click', function(e) {
34+
e.preventDefault();
35+
e.stopImmediatePropagation();
36+
37+
var eventType = $(this).attr('class');
38+
var method = '';
39+
var queue = '<%= params[:queue] %>';
40+
41+
if (queue === '') {
42+
queue = 'failure';
43+
}
44+
45+
if (eventType) {
46+
if (eventType == 'remove') {
47+
method = 'DELETE';
48+
} else {
49+
method = 'PUT';
50+
}
51+
52+
var url = $(this).attr('href');
53+
var jobId = $(this).attr('data-job-id');
54+
55+
var container = $('.failed-' + jobId);
56+
if (url) {
57+
$.ajax({
58+
url: url,
59+
method: method,
60+
data: {
61+
id: jobId,
62+
queue: queue
63+
}
64+
}).done(function(data) {
65+
$(container).hide();
66+
}).fail(function() {
67+
console.log('failed to delete job: ' + jobId);
68+
});
69+
}
70+
}
71+
});
72+
</script>

test/functional/failures_controller_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class FailuresControllerTest < ActionController::TestCase
1919
it "deletes the failure" do
2020
Resque::Failure.expects(:remove).with('123')
2121
visit(:destroy, {:id => 123}, :method => :delete)
22-
assert_redirected_to failures_path
22+
assert_response(:success, '{success: true}')
2323
end
2424
end
2525

0 commit comments

Comments
 (0)