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

Add Stats API.

This commit is contained in:
Brandon Hilkert 2012-12-04 08:11:25 -05:00
parent 2021724ad9
commit 005c868d2c
4 changed files with 90 additions and 19 deletions

View file

@ -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

View file

@ -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

View file

@ -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 }

View file

@ -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