diff --git a/lib/sidekiq/api.rb b/lib/sidekiq/api.rb index d9df81f6..27534556 100644 --- a/lib/sidekiq/api.rb +++ b/lib/sidekiq/api.rb @@ -10,10 +10,12 @@ module Sidekiq Sidekiq.redis { |conn| conn.get("stat:failed") }.to_i end - def reset + def reset(*stats) + all = %w(failed processed) + stats = stats.empty? ? all : all & stats.flatten.compact.map(&:to_s) + Sidekiq.redis do |conn| - conn.set("stat:failed", 0) - conn.set("stat:processed", 0) + stats.each { |stat| conn.set("stat:#{stat}", 0) } end end diff --git a/test/test_api.rb b/test/test_api.rb index 893a2608..d5f6d7e1 100644 --- a/test/test_api.rb +++ b/test/test_api.rb @@ -33,15 +33,44 @@ class TestApi < Sidekiq::Test end describe "reset" do - it 'can reset stats' do + before do Sidekiq.redis do |conn| conn.set('stat:processed', 5) conn.set('stat:failed', 10) - Sidekiq::Stats.new.reset + end + end + + it 'will reset all stats by default' do + Sidekiq::Stats.new.reset + Sidekiq.redis do |conn| assert_equal '0', conn.get('stat:processed') assert_equal '0', conn.get('stat:failed') end end + + it 'can reset individual stats' do + Sidekiq::Stats.new.reset('failed') + Sidekiq.redis do |conn| + assert_equal '5', conn.get('stat:processed') + assert_equal '0', conn.get('stat:failed') + end + end + + it 'can accept anything that responds to #to_s' do + Sidekiq::Stats.new.reset(:failed) + Sidekiq.redis do |conn| + assert_equal '5', conn.get('stat:processed') + assert_equal '0', conn.get('stat:failed') + end + end + + it 'ignores anything other than "failed" or "processed"' do + Sidekiq::Stats.new.reset((1..10).to_a, ['failed']) + Sidekiq.redis do |conn| + assert_equal '5', conn.get('stat:processed') + assert_equal '0', conn.get('stat:failed') + end + end end describe "queues" do