From 005c868d2c838410b966fed0adde21c79f625e99 Mon Sep 17 00:00:00 2001 From: Brandon Hilkert Date: Tue, 4 Dec 2012 08:11:25 -0500 Subject: [PATCH] Add Stats API. --- lib/sidekiq/api.rb | 30 ++++++++++++++++++++++ lib/sidekiq/stats.rb | 10 -------- test/test_api.rb | 60 ++++++++++++++++++++++++++++++++++++++++++++ test/test_stats.rb | 9 ------- 4 files changed, 90 insertions(+), 19 deletions(-) diff --git a/lib/sidekiq/api.rb b/lib/sidekiq/api.rb index efe17501..a1d880c2 100644 --- a/lib/sidekiq/api.rb +++ b/lib/sidekiq/api.rb @@ -2,6 +2,36 @@ require 'sidekiq' module Sidekiq + class Stats + def processed + Sidekiq.redis do |conn| + conn.get("stat:processed") + end || 0 + end + + def failed + Sidekiq.redis do |conn| + conn.get("stat:failed") + end || 0 + end + + def queues + queues = Sidekiq.redis { |conn| conn.smembers('queues') } + + Sidekiq.redis do |conn| + queues.inject({}) do |memo, queue| + memo[queue] = conn.llen("queue:#{queue}") + memo + end + end + end + + def queued + queues.values.inject(&:+) || 0 + end + + end + ## # Encapsulates a queue within Sidekiq. # Allows enumeration of all jobs within the queue diff --git a/lib/sidekiq/stats.rb b/lib/sidekiq/stats.rb index 8108dc44..7f60e5a2 100644 --- a/lib/sidekiq/stats.rb +++ b/lib/sidekiq/stats.rb @@ -23,14 +23,4 @@ module Sidekiq inject(0) {|memo, val| memo + val } results end - - def size(*queues) - return info[:backlog] if queues.empty? - - Sidekiq.redis { |conn| - conn.multi { - queues.map { |q| conn.llen("queue:#{q}") } - } - }.inject(0) { |memo, count| memo += count } - end end diff --git a/test/test_api.rb b/test/test_api.rb index ef040b5f..e8f4709a 100644 --- a/test/test_api.rb +++ b/test/test_api.rb @@ -1,6 +1,66 @@ require 'helper' class TestApi < MiniTest::Unit::TestCase + describe "stats" do + before do + Sidekiq.redis {|c| c.flushdb } + end + + describe "processed" do + it "is initially zero" do + s = Sidekiq::Stats.new + assert_equal 0, s.processed + end + end + + describe "failed" do + it "is initially zero" do + s = Sidekiq::Stats.new + assert_equal 0, s.processed + end + end + + describe "queues" do + it "is initially empty" do + s = Sidekiq::Stats.new + assert_equal 0, s.queues.size + end + + it "returns a hash of queue and size" do + Sidekiq.redis do |conn| + conn.rpush 'queue:foo', '{}' + conn.sadd 'queues', 'foo' + + 3.times { conn.rpush 'queue:bar', '{}' } + conn.sadd 'queues', 'bar' + end + + s = Sidekiq::Stats.new + assert_equal ({ "foo" => 1, "bar" => 3 }), s.queues + end + end + + describe "queued" do + it "is initially empty" do + s = Sidekiq::Stats.new + assert_equal 0, s.queued + end + + it "returns total queued jobs" do + Sidekiq.redis do |conn| + conn.rpush 'queue:foo', '{}' + conn.sadd 'queues', 'foo' + + 3.times { conn.rpush 'queue:bar', '{}' } + conn.sadd 'queues', 'bar' + end + + s = Sidekiq::Stats.new + assert_equal 4, s.queued + end + end + end + describe 'with an empty database' do before do Sidekiq.redis {|c| c.flushdb } diff --git a/test/test_stats.rb b/test/test_stats.rb index 10202f3e..cd98bfae 100644 --- a/test/test_stats.rb +++ b/test/test_stats.rb @@ -92,15 +92,6 @@ class TestStats < MiniTest::Unit::TestCase end end - describe "size" do - it "returns size of queues" do - assert_equal 0, Sidekiq.size("foox") - assert_equal 1, Sidekiq.size(:foo) - assert_equal 1, Sidekiq.size("foo") - assert_equal 4, Sidekiq.size("foo", "bar") - assert_equal 6, Sidekiq.size - end - end end end