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:
parent
2021724ad9
commit
005c868d2c
4 changed files with 90 additions and 19 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 }
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue