Skip to content

Commit 2af831c

Browse files
michaeldwandefunkt
authored andcommitted
Requeue failed jobs from resque-web
1 parent 6d73ff3 commit 2af831c

File tree

6 files changed

+31
-3
lines changed

6 files changed

+31
-3
lines changed

lib/resque/failure.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,5 +59,8 @@ def self.clear
5959
backend.clear
6060
end
6161

62+
def self.requeue(index)
63+
backend.requeue(index)
64+
end
6265
end
6366
end

lib/resque/failure/base.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ def self.url
4848
# Clear all failure objects
4949
def self.clear
5050
end
51+
52+
def self.requeue(index)
53+
end
5154

5255
# Logging!
5356
def log(message)

lib/resque/failure/redis.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ def self.clear
2929
Resque.redis.del(:failed)
3030
end
3131

32+
def self.requeue(index)
33+
item = all(index)
34+
item['retried_at'] = Time.now.strftime("%Y/%m/%d %H:%M:%S")
35+
Resque.redis.lset(:failed, index, Resque.encode(item))
36+
Job.create(item['queue'], item['payload']['class'], *item['payload']['args'])
37+
end
3238
end
3339
end
3440
end

lib/resque/server.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,6 @@ def show(page, layout = true)
129129
Resque.remove_queue(params[:id])
130130
redirect u('queues')
131131
end
132-
133132

134133
%w( overview workers ).each do |page|
135134
get "/#{page}.poll" do
@@ -151,6 +150,11 @@ def show(page, layout = true)
151150
Resque::Failure.clear
152151
redirect u('failed')
153152
end
153+
154+
get "/failed/requeue/:index" do
155+
Resque::Failure.requeue(params[:index])
156+
redirect u('failed')
157+
end
154158

155159
get "/stats" do
156160
redirect url("/stats/resque")

lib/resque/server/public/style.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ body { padding:0; margin:0; }
6767
#main ul.failed li {background:-webkit-gradient(linear, left top, left bottom, from(#efefef), to(#fff)) #efefef; margin-top:10px; padding:10px; overflow:hidden; -webkit-border-radius:5px; border:1px solid #ccc; }
6868
#main ul.failed li dl dt {font-size:80%; color:#999; width:60px; float:left; padding-top:1px; text-align:right;}
6969
#main ul.failed li dl dd {margin-bottom:10px; margin-left:70px;}
70+
#main ul.failed li dl dd .retry { float: right; }
7071
#main ul.failed li dl dd code, #main ul.failed li dl dd pre { font-family:Monaco, "Courier New", monospace; font-size:90%;}
7172
#main ul.failed li dl dd.error a {font-family:Monaco, "Courier New", monospace; font-size:90%; }
7273
#main ul.failed li dl dd.error pre { margin-top:3px; line-height:1.3;}

lib/resque/server/views/failed.erb

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<%start = params[:start].to_i %>
22
<%failed = Resque::Failure.all(start, 20)%>
3+
<% index = 0 %>
34

45
<h1>Failed Jobs</h1>
56
<%unless failed.empty?%>
@@ -12,10 +13,20 @@
1213

1314
<ul class='failed'>
1415
<%for job in failed%>
16+
<% index += 1 %>
1517
<li>
1618
<dl>
1719
<dt>Worker</dt>
18-
<dd><a href="<%= url(:workers, job['worker']) %>"><%= job['worker'].split(':')[0...2].join(':') %></a> on <b class='queue-tag'><%= job['queue'] %></b > at <b><span class="time"><%= job['failed_at'] %></span></b></dd>
20+
<dd>
21+
<a href="<%= url(:workers, job['worker']) %>"><%= job['worker'].split(':')[0...2].join(':') %></a> on <b class='queue-tag'><%= job['queue'] %></b > at <b><span class="time"><%= job['failed_at'] %></span></b>
22+
<div class='retry'>
23+
<% if job['retried_at'] %>
24+
Retried <b><span class="time"><%= job['retried_at'] %></span></b>
25+
<% else %>
26+
<a href="<%= u "failed/requeue/#{start + index - 1}" %>">Retry</a>
27+
<% end %>
28+
</div>
29+
</dd>
1930
<dt>Class</dt>
2031
<dd><code><%= job['payload']['class'] %></code></dd>
2132
<dt>Arguments</dt>
@@ -25,7 +36,7 @@
2536
<dt>Error</dt>
2637
<dd class='error'>
2738
<a href="#" class="backtrace"><%= h(job['error']) %></a>
28-
<pre style='display:none'><%=h job['backtrace'].join("\n") %></pre>
39+
<pre style='display:none'><%=h job['backtrace'].join("\n") %></pre>
2940
</dd>
3041
</dl>
3142
<div class='r'>

0 commit comments

Comments
 (0)