resque_stuck_queue 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|