From 7f51db4ee309ecee29963ec1355ebc9bc9769ae6 Mon Sep 17 00:00:00 2001 From: Mike Perham Date: Thu, 23 May 2013 22:58:06 -0700 Subject: [PATCH] Add Sidekiq::Queue#latency --- Changes.md | 4 +++- lib/sidekiq/api.rb | 8 ++++++++ lib/sidekiq/version.rb | 2 +- test/test_api.rb | 10 +++++++--- 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/Changes.md b/Changes.md index f40d4021..32deddd5 100644 --- a/Changes.md +++ b/Changes.md @@ -2,7 +2,9 @@ HEAD ----------- - Record the timestamp when jobs are enqueued. Add - Sidekiq::Stats::Job#enqueued_at to query the time. [mariovisic, #944] + Sidekiq::Job#enqueued\_at to query the time. [mariovisic, #944] +- Add Sidekiq::Queue#latency - calculates diff between now and + enqueued\_at for the oldest job in the queue. 2.12.0 ----------- diff --git a/lib/sidekiq/api.rb b/lib/sidekiq/api.rb index 2e1af1bf..100b542f 100644 --- a/lib/sidekiq/api.rb +++ b/lib/sidekiq/api.rb @@ -128,6 +128,14 @@ module Sidekiq Sidekiq.redis { |con| con.llen(@rname) } end + def latency + entry = Sidekiq.redis do |conn| + conn.lrange(@rname, -1, -1) + end.first + return 0 unless entry + Time.now.to_f - Sidekiq.load_json(entry)['enqueued_at'] + end + def each(&block) page = 0 page_size = 50 diff --git a/lib/sidekiq/version.rb b/lib/sidekiq/version.rb index ed42424a..e434da6b 100644 --- a/lib/sidekiq/version.rb +++ b/lib/sidekiq/version.rb @@ -1,3 +1,3 @@ module Sidekiq - VERSION = "2.12.0" + VERSION = "2.12.1" end diff --git a/test/test_api.rb b/test/test_api.rb index 1dac7b9c..77c5284d 100644 --- a/test/test_api.rb +++ b/test/test_api.rb @@ -164,6 +164,7 @@ class TestApi < Minitest::Test it 'shows queue as empty' do q = Sidekiq::Queue.new assert_equal 0, q.size + assert_equal 0, q.latency end class ApiWorker @@ -171,8 +172,8 @@ class TestApi < Minitest::Test end it 'can enumerate jobs' do + q = Sidekiq::Queue.new Time.stub(:now, Time.new(2012, 12, 26)) do - q = Sidekiq::Queue.new ApiWorker.perform_async(1, 'mike') assert_equal ['TestApi::ApiWorker'], q.map(&:klass) @@ -181,9 +182,12 @@ class TestApi < Minitest::Test assert_equal [1, 'mike'], job.args assert_equal Time.new(2012, 12, 26), job.enqueued_at - q = Sidekiq::Queue.new('other') - assert_equal 0, q.size end + + assert q.latency > 10_000_000 + + q = Sidekiq::Queue.new('other') + assert_equal 0, q.size end it 'can delete jobs' do