1
0
Fork 0
mirror of https://github.com/mperham/sidekiq.git synced 2022-11-09 13:52:34 -05:00

Add "Delete All" and "Retry All" buttons to retries on Web UI.

This commit is contained in:
Brandon Hilkert 2012-11-25 21:43:48 -05:00
parent 166edb8f68
commit 3758afba6a
6 changed files with 84 additions and 9 deletions

View file

@ -5,6 +5,7 @@ HEAD
Sidekiq client does not have to load your worker classes at all. [#524]
- `Sidekiq::Client.push_bulk` now works with inline testing.
- **Really** fix status icon in Web UI this time.
- Add "Delete All" and "Retry All" buttons to Retries in Web UI
2.5.3

View file

@ -43,6 +43,15 @@ module Sidekiq
end
end
end
def clear
Sidekiq.redis do |conn|
conn.multi do
conn.del("queue:#{name}")
conn.srem("queues", name)
end
end
end
end
##
@ -143,6 +152,12 @@ module Sidekiq
end
count != 0
end
def clear
Sidekiq.redis do |conn|
conn.del(@zset)
end
end
end
##

View file

@ -136,10 +136,7 @@ module Sidekiq
end
post "/queues/:name" do
Sidekiq.redis do |conn|
conn.del("queue:#{params[:name]}")
conn.srem("queues", params[:name])
end
Sidekiq::Queue.new(params[:name]).clear
redirect "#{root_path}queues"
end
@ -195,6 +192,18 @@ module Sidekiq
redirect "#{root_path}retries"
end
post "/retries/all/delete" do
Sidekiq::RetrySet.new.clear
redirect "#{root_path}retries"
end
post "/retries/all/retry" do
Sidekiq::RetrySet.new.each do |job|
process_score('retry', job.score, :retry)
end
redirect "#{root_path}retries"
end
post "/retries/:score" do
halt 404 unless params[:score]
score = params[:score].to_f

View file

@ -36,6 +36,17 @@ class TestApi < MiniTest::Unit::TestCase
assert_equal 0, q.size
end
it 'can clear a queue' do
q = Sidekiq::Queue.new
2.times { ApiWorker.perform_async(1, 'mike') }
q.clear
Sidekiq.redis do |conn|
refute conn.smembers('queues').include?('foo')
refute conn.exists('queues:foo')
end
end
it 'shows empty retries' do
r = Sidekiq::RetrySet.new
assert_equal 0, r.size
@ -64,9 +75,18 @@ class TestApi < MiniTest::Unit::TestCase
assert_equal 0, r.size
end
def add_retry
it 'can clear retries' do
add_retry
add_retry('test')
r = Sidekiq::RetrySet.new
assert_equal 2, r.size
r.clear
assert_equal 0, r.size
end
def add_retry(jid = 'bob')
at = Time.now.to_f
payload = Sidekiq.dump_json('class' => 'ApiWorker', 'args' => [1, 'mike'], 'queue' => 'default', 'jid' => 'bob')
payload = Sidekiq.dump_json('class' => 'ApiWorker', 'args' => [1, 'mike'], 'queue' => 'default', 'jid' => jid)
Sidekiq.redis do |conn|
conn.zadd('retry', at.to_s, payload)
end

View file

@ -72,9 +72,10 @@ class TestWeb < MiniTest::Unit::TestCase
Sidekiq.redis do |conn|
refute conn.smembers('queues').include?('foo')
refute conn.exists('queues:foo')
end
end
it 'can delete a job' do
Sidekiq.redis do |conn|
conn.rpush('queue:foo', "{}")
@ -154,6 +155,15 @@ class TestWeb < MiniTest::Unit::TestCase
refute_match /#{score}/, last_response.body
end
it 'can delete all retries' do
3.times { add_retry }
post "/retries/all/delete", 'delete' => 'Delete'
assert_equal 0, Sidekiq::RetrySet.new.size
assert_equal 302, last_response.status
assert_equal 'http://example.org/retries', last_response.header['Location']
end
it 'can retry a single retry now' do
msg, score = add_retry
@ -166,6 +176,20 @@ class TestWeb < MiniTest::Unit::TestCase
assert_match /#{msg['args'][2]}/, last_response.body
end
it 'can retry all retries' do
msg, score = add_retry
add_retry
post "/retries/all/retry", 'retry' => 'Retry'
assert_equal 302, last_response.status
assert_equal 'http://example.org/retries', last_response.header['Location']
assert_equal 2, Sidekiq::Queue.new("default").size
get '/queues/default'
assert_equal 200, last_response.status
assert_match /#{msg['args'][2]}/, last_response.body
end
it 'can show user defined tab' do
begin
Sidekiq::Web.tabs['Custom Tab'] = '/custom'

View file

@ -28,7 +28,13 @@ header.row
a href="#{root_path}queues/#{msg['queue']}" #{msg['queue']}
td= msg['class']
td= display_args(msg['args'])
input.btn.btn-danger.btn-small.pull-right type="submit" name="delete" value="Delete"
input.btn.btn-primary.btn-small.pull-right type="submit" name="retry" value="Retry Now"
input.btn.btn-primary.btn-small.pull-left type="submit" name="retry" value="Retry Now"
input.btn.btn-danger.btn-small.pull-left type="submit" name="delete" value="Delete"
form action="#{root_path}retries/all/delete" method="post"
input.btn.btn-danger.btn-small.pull-right type="submit" name="delete" value="Delete All" data-confirm="Are you sure?"
form action="#{root_path}retries/all/retry" method="post"
input.btn.btn-danger.btn-small.pull-right type="submit" name="retry" value="Retry All" data-confirm="Are you sure?"
- else
.alert.alert-success No retries were found