Skip to content

Commit 8cc892d

Browse files
committed
Add helper method to query the latency on the Queue object
1 parent 60e4ba4 commit 8cc892d

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

app/models/solid_queue/queue.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,19 @@ def size
4040
@size ||= ReadyExecution.queued_as(name).count
4141
end
4242

43+
def latency
44+
@latency = begin
45+
now = Time.current
46+
oldest_enqueued_at = SolidQueue::ReadyExecution.queued_as(name).minimum(:created_at) || now
47+
48+
(now - oldest_enqueued_at).to_i
49+
end
50+
end
51+
52+
def human_latency
53+
ActiveSupport::Duration.build(latency).inspect
54+
end
55+
4356
def ==(queue)
4457
name == queue.name
4558
end

test/unit/queue_test.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
class QueueTest < ActiveSupport::TestCase
44
setup do
5+
freeze_time
6+
57
5.times do
68
AddToBufferJob.perform_later "hey!"
79
end
@@ -39,4 +41,23 @@ class QueueTest < ActiveSupport::TestCase
3941
@default_queue.resume
4042
end
4143
end
44+
45+
test "return latency in seconds on each queue" do
46+
travel_to 5.minutes.from_now
47+
48+
assert_in_delta 5.minutes.to_i, @background_queue.latency, 1.second.to_i
49+
assert_equal 0, @default_queue.latency
50+
51+
travel_to 10.minutes.from_now
52+
53+
assert_in_delta 15.minutes.to_i, @background_queue.latency, 1.second.to_i
54+
assert_equal 0, @default_queue.latency
55+
end
56+
57+
test "return human latency on each queue" do
58+
travel_to 5.minutes.from_now
59+
60+
assert_match /5 minutes/, @background_queue.human_latency
61+
assert_match /0 seconds/, @default_queue.human_latency
62+
end
4263
end

0 commit comments

Comments
 (0)