From ed06e2dcd29b3114c86c345663744dd692a6a50c Mon Sep 17 00:00:00 2001 From: David Leung Date: Tue, 23 Oct 2012 16:11:14 -0700 Subject: [PATCH] Modified web ui to add a delete button to cancel jobs in queue --- lib/sidekiq/web.rb | 7 +++++++ test/test_web.rb | 18 ++++++++++++++++++ web/views/queue.slim | 6 +++++- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/lib/sidekiq/web.rb b/lib/sidekiq/web.rb index 3318631f..ef0626fb 100644 --- a/lib/sidekiq/web.rb +++ b/lib/sidekiq/web.rb @@ -165,6 +165,13 @@ module Sidekiq redirect "#{root_path}queues" end + post "/queues/:name/delete" do + Sidekiq.redis do |conn| + conn.lrem("queue:#{params[:name]}", 0, params[:key_val]) + end + redirect "#{root_path}queues/#{params[:name]}" + end + get "/retries/:score" do halt 404 unless params[:score] @score = params[:score].to_f diff --git a/test/test_web.rb b/test/test_web.rb index 9c4bb34e..ab91572d 100644 --- a/test/test_web.rb +++ b/test/test_web.rb @@ -74,6 +74,24 @@ class TestWeb < MiniTest::Unit::TestCase refute conn.smembers('queues').include?('foo') end end + + it 'can delete a job' do + Sidekiq.redis do |conn| + conn.rpush('queue:foo', "{}") + conn.rpush('queue:foo', "{\"foo\":\"bar\"}") + conn.rpush('queue:foo', "{\"foo2\":\"bar2\"}") + end + + get '/queues/foo' + assert_equal 200, last_response.status + + post '/queues/foo/delete', key_val: "{\"foo\":\"bar\"}" + assert_equal 302, last_response.status + + Sidekiq.redis do |conn| + refute conn.lrange('queue:foo', 0, -1).include?("{\"foo\":\"bar\"}") + end + end it 'can display scheduled' do get '/scheduled' diff --git a/web/views/queue.slim b/web/views/queue.slim index ca60044f..78dd9eca 100644 --- a/web/views/queue.slim +++ b/web/views/queue.slim @@ -7,6 +7,7 @@ table class="table table-striped table-bordered" tr th Class th Arguments + th - @messages.each_with_index do |msg, index| tr td= msg['class'] @@ -17,5 +18,8 @@ table class="table table-striped table-bordered" .collapse[id="worker_#{index}"]= msg['args'] - else = msg['args'] - + td + form action="#{root_path}queues/#{@name}/delete" method="post" + input name="key_val" value="#{msg.to_json}" type="hidden" + input.btn.btn-danger.btn-mini type="submit" name="delete" value="Delete" data-confirm="Are you sure you want to delete this job?" == slim :_paging, :locals => { :url => "#{root_path}queues/#{@name}" }