resque_stuck_queue 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/Gemfile +2 -0
- data/README.md +2 -3
- data/lib/resque_stuck_queue.rb +3 -8
- data/lib/resque_stuck_queue/config.rb +3 -2
- data/lib/resque_stuck_queue/heartbeat_job.rb +8 -7
- data/lib/resque_stuck_queue/version.rb +1 -1
- data/resque_stuck_queue.gemspec +2 -1
- data/test/test_collision.rb +1 -1
- data/test/test_integration.rb +1 -1
- data/test/test_lagtime.rb +1 -1
- data/test/test_named_queues.rb +1 -1
- data/test/test_resque_2.rb +3 -3
- data/test/test_resque_stuck_queue.rb +6 -1
- data/test/test_set_custom_refresh_job.rb +1 -1
- metadata +9 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 21e22e07449416caa592d83157978103b6d3cb25
|
4
|
-
data.tar.gz: 52261706a53625364f3bddc7c531e8e1a1e38fa8
|
5
2
|
SHA512:
|
6
|
-
|
7
|
-
|
3
|
+
data.tar.gz: c61972d3ea6fbc28feaf6b720c24fa48c3d78ce06967e2b00762fb5dd3dd6d6ad1014616300b37299ee693b9c4a25dcddfc30a923b85285b35d24fe383639a6c
|
4
|
+
metadata.gz: f3e6cb7aeb0843612de8ccaccd6fcea4efab227d525ca3dcfca053d70e13a229ddd24ae8b43dc4cdc9b5c6bf3bd940fd1fa26dc8657f2ba248fc3fdbe85c590d
|
5
|
+
SHA1:
|
6
|
+
data.tar.gz: 1347fccc7e4b37ea0a0626a176d904c223c4d21b
|
7
|
+
metadata.gz: 9f217dadd17a7ff267b66b858330218c1e9f24fc
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -41,7 +41,7 @@ triggered_handler:
|
|
41
41
|
Resque::StuckQueue.config[:triggered_handler] = proc { |queue_name, lagtime| send_email('queue #{queue_name} isnt working, aaah the daemons') }
|
42
42
|
|
43
43
|
recovered_handler:
|
44
|
-
set to what gets triggered when resque-stuck-queue has triggered a problem, but then detects the queue went back down to functioning well again
|
44
|
+
set to what gets triggered when resque-stuck-queue has triggered a problem, but then detects the queue went back down to functioning well again(it wont trigger again until it has recovered).
|
45
45
|
Example:
|
46
46
|
Resque::StuckQueue.config[:recovered_handler] = proc { |queue_name, lagtime| send_email('phew, queue #{queue_name} is ok') }
|
47
47
|
|
@@ -56,7 +56,7 @@ trigger_timeout:
|
|
56
56
|
Resque::StuckQueue.config[:trigger_timeout] = 55.minutes
|
57
57
|
|
58
58
|
redis:
|
59
|
-
set the Redis
|
59
|
+
set the Redis StuckQueue will use. Either a Redis or Redis::Namespace instance.
|
60
60
|
|
61
61
|
heartbeat_key:
|
62
62
|
optional, name of keys to keep track of the last good resque heartbeat time
|
@@ -75,7 +75,6 @@ abort_on_exception:
|
|
75
75
|
|
76
76
|
heartbeat_job:
|
77
77
|
optional, your own custom refreshing job. if you are using something other than resque
|
78
|
-
|
79
78
|
</pre>
|
80
79
|
|
81
80
|
To start it:
|
data/lib/resque_stuck_queue.rb
CHANGED
@@ -25,13 +25,8 @@ module Resque
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def redis
|
28
|
-
@redis ||= (config[:redis] ||
|
29
|
-
|
30
|
-
|
31
|
-
def redis=(rds)
|
32
|
-
# for resq2 tests
|
33
|
-
@redis = rds
|
34
|
-
Resque.redis = @redis
|
28
|
+
@redis ||= (config[:redis] || raise(Config::NoConfigError, "Must configure a redis instance to use. Please set a Redis or Redis::Namespace."))
|
29
|
+
HeartbeatJob.redis = @redis
|
35
30
|
end
|
36
31
|
|
37
32
|
def heartbeat_key_for(queue)
|
@@ -142,7 +137,7 @@ module Resque
|
|
142
137
|
config[:heartbeat_job].call
|
143
138
|
else
|
144
139
|
queues.each do |queue_name|
|
145
|
-
Resque.enqueue_to(queue_name, HeartbeatJob,
|
140
|
+
Resque.enqueue_to(queue_name, HeartbeatJob, heartbeat_key_for(queue_name))
|
146
141
|
end
|
147
142
|
end
|
148
143
|
end
|
@@ -19,13 +19,14 @@ module Resque
|
|
19
19
|
:recovered_handler => "set to what gets triggered when resque-stuck-queue has triggered a problem, but then detects the queue went back down to functioning well again(it wont trigger again until it has recovered).\n\tExample:\n\tResque::StuckQueue.config[:recovered_handler] = proc { |queue_name, lagtime| send_email('phew, queue \#{queue_name} is ok') }",
|
20
20
|
:heartbeat => "set to how often to push that 'heartbeat' job to refresh the latest time it worked.\n\tExample:\n\tResque::StuckQueue.config[:heartbeat] = 5.minutes",
|
21
21
|
:trigger_timeout => "set to how much of a resque work lag you are willing to accept before being notified. note: take the :heartbeat setting into account when setting this timeout.\n\tExample:\n\tResque::StuckQueue.config[:trigger_timeout] = 55.minutes",
|
22
|
-
:redis => "set the Redis
|
22
|
+
:redis => "set the Redis StuckQueue will use. Either a Redis or Redis::Namespace instance.",
|
23
|
+
|
23
24
|
:heartbeat_key => "optional, name of keys to keep track of the last good resque heartbeat time",
|
24
25
|
:triggered_key => "optional, name of keys to keep track of the last trigger time",
|
25
26
|
:logger => "optional, pass a Logger. Default a ruby logger will be instantiated. Needs to respond to that interface.",
|
26
27
|
:queues => "optional, monitor specific queues you want to send a heartbeat/monitor to. default is :app",
|
27
28
|
:abort_on_exception => "optional, if you want the resque-stuck-queue threads to explicitly raise, default is false",
|
28
|
-
:heartbeat_job
|
29
|
+
:heartbeat_job => "optional, your own custom refreshing job. if you are using something other than resque",
|
29
30
|
}
|
30
31
|
|
31
32
|
OPTIONS = OPTIONS_DESCRIPTIONS.keys
|
@@ -1,13 +1,14 @@
|
|
1
1
|
module Resque
|
2
2
|
module StuckQueue
|
3
3
|
class HeartbeatJob
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
class << self
|
5
|
+
|
6
|
+
attr_accessor :redis
|
7
|
+
|
8
|
+
def perform(keyname)
|
9
|
+
@redis.set(keyname, Time.now.to_i)
|
10
|
+
end
|
11
|
+
|
11
12
|
end
|
12
13
|
end
|
13
14
|
end
|
data/resque_stuck_queue.gemspec
CHANGED
@@ -18,8 +18,9 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_runtime_dependency "redis-mutex"
|
21
|
+
spec.add_runtime_dependency "redis-mutex" # TODO rm this
|
22
22
|
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.5"
|
24
24
|
spec.add_development_dependency "rake"
|
25
|
+
spec.add_development_dependency "redis-namespace"
|
25
26
|
end
|
data/test/test_collision.rb
CHANGED
data/test/test_integration.rb
CHANGED
@@ -37,7 +37,7 @@ class TestIntegration < Minitest::Test
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def setup
|
40
|
-
Resque::StuckQueue.redis = Redis.new
|
40
|
+
Resque::StuckQueue.config[:redis] = Redis.new
|
41
41
|
Resque::StuckQueue.redis.flushall
|
42
42
|
Resque::StuckQueue.config[:abort_on_exception] = true
|
43
43
|
self.class.run_resque_before_all
|
data/test/test_lagtime.rb
CHANGED
@@ -12,7 +12,7 @@ class TestLagTime < Minitest::Test
|
|
12
12
|
include TestHelper
|
13
13
|
|
14
14
|
def setup
|
15
|
-
Resque::StuckQueue.redis = Redis.new
|
15
|
+
Resque::StuckQueue.config[:redis] = Redis.new
|
16
16
|
Resque::StuckQueue.redis.flushall
|
17
17
|
Resque::StuckQueue.config[:abort_on_exception] = true
|
18
18
|
end
|
data/test/test_named_queues.rb
CHANGED
@@ -8,7 +8,7 @@ class TestNamedQueues < Minitest::Test
|
|
8
8
|
Resque::StuckQueue.config[:trigger_timeout] = 1
|
9
9
|
Resque::StuckQueue.config[:heartbeat] = 1
|
10
10
|
Resque::StuckQueue.config[:abort_on_exception] = true
|
11
|
-
Resque::StuckQueue.redis = Redis.new
|
11
|
+
Resque::StuckQueue.config[:redis] = Redis.new
|
12
12
|
Resque::StuckQueue.redis.flushall
|
13
13
|
end
|
14
14
|
|
data/test/test_resque_2.rb
CHANGED
@@ -16,13 +16,13 @@ if !ENV['RESQUE_2'].nil?
|
|
16
16
|
|
17
17
|
def setup
|
18
18
|
assert (Resque::VERSION.match /^2\./), "must run in 2.0"
|
19
|
-
Resque::StuckQueue.redis = Redis.new
|
19
|
+
Resque::StuckQueue.config[:redis] = Redis.new
|
20
20
|
Redis.new.flushall
|
21
21
|
end
|
22
22
|
|
23
23
|
def test_works_with_2_point_oh_do_not_trigger_because_key_is_updated
|
24
24
|
|
25
|
-
Resque::StuckQueue.redis = Redis.new
|
25
|
+
Resque::StuckQueue.config[:redis] = Redis.new
|
26
26
|
|
27
27
|
Resque::StuckQueue.config[:heartbeat] = 1
|
28
28
|
Resque::StuckQueue.config[:abort_on_exception] = true
|
@@ -34,7 +34,7 @@ if !ENV['RESQUE_2'].nil?
|
|
34
34
|
#binding.pry
|
35
35
|
Resque::StuckQueue.start_in_background
|
36
36
|
|
37
|
-
@r2_pid = fork { Resque::StuckQueue.redis = Redis.new ; Resque::Worker.new("*", :graceful_term => true).work ; Process.waitall }
|
37
|
+
@r2_pid = fork { Resque::StuckQueue.config[:redis] = Redis.new ; Resque::Worker.new("*", :graceful_term => true).work ; Process.waitall }
|
38
38
|
sleep 10
|
39
39
|
|
40
40
|
# did not trigger, resque picked up refresh jobs
|
@@ -12,12 +12,17 @@ class TestResqueStuckQueue < Minitest::Test
|
|
12
12
|
def setup
|
13
13
|
puts "#{__method__}"
|
14
14
|
# clean previous test runs
|
15
|
-
Resque::StuckQueue.redis = Redis.new
|
15
|
+
Resque::StuckQueue.config[:redis] = Redis.new
|
16
16
|
Resque::StuckQueue.redis.flushall
|
17
17
|
Resque::StuckQueue.config[:heartbeat] = 1 # seconds
|
18
18
|
Resque::StuckQueue.config[:abort_on_exception] = true
|
19
19
|
end
|
20
20
|
|
21
|
+
def test_watcher_and_heartbeat_redis_are_the_same
|
22
|
+
# to avoid namespace collisions
|
23
|
+
assert_equal Resque::StuckQueue.redis, Resque::StuckQueue::HeartbeatJob.redis
|
24
|
+
end
|
25
|
+
|
21
26
|
def test_configure_heartbeat_key
|
22
27
|
puts "#{__method__}"
|
23
28
|
assert_nil Resque::StuckQueue.redis.get("it-is-configurable"), "global key should not be set"
|
@@ -10,7 +10,7 @@ class TestYourOwnRefreshJob < Minitest::Test
|
|
10
10
|
Resque::StuckQueue.config[:heartbeat] = 1
|
11
11
|
Resque::StuckQueue.config[:abort_on_exception] = true
|
12
12
|
Resque::StuckQueue.config[:heartbeat_job] = nil
|
13
|
-
Resque::StuckQueue.redis = Redis.new
|
13
|
+
Resque::StuckQueue.config[:redis] = Redis.new
|
14
14
|
Resque::StuckQueue.redis.flushall
|
15
15
|
end
|
16
16
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resque_stuck_queue
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shai Rosenfeld
|
@@ -40,6 +40,14 @@ dependencies:
|
|
40
40
|
- *id003
|
41
41
|
type: :development
|
42
42
|
version_requirements: *id004
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: redis-namespace
|
45
|
+
prerelease: false
|
46
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- *id003
|
49
|
+
type: :development
|
50
|
+
version_requirements: *id005
|
43
51
|
description: where the wild things are. err, when resque gets stuck
|
44
52
|
email:
|
45
53
|
- srosenfeld@engineyard.com
|