resque_stuck_queue 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- data.tar.gz: 984e71835c73d5f071caca892a28cb91ac6efb8f
4
- metadata.gz: 0f1326d639f3e02c6710b18bb4ba16f25edd30f9
5
2
  SHA512:
6
- data.tar.gz: c21a0aab9167fc5dbf9e9d95f7625165bc306df82f509db512198eefc79cf51a1801a65af658239b44d5959a52ad68406a4527bd14a4b953d4816b2f9eb59f05
7
- metadata.gz: 7f5674fd8a47fd21f08ba0114aa6f8fde2fb75e0237fa8e9cce5d1462b5cb8be9dcf8427d05c9cb19499a55835d52733c82849e7b60323b06b5d5bacfd05026d
3
+ metadata.gz: df4e25ba257df91726f7c92cfe1a92f1a04b2afecb0106a4a80d0da12b494c67672fd5c40a981c813b4e18ede7d18b5e2aba3c8a445692e910acc17b9adc360e
4
+ data.tar.gz: 22f4307be4f19c7e3b138c4d18013ac8fefc3a7a4d53a4071c6a6f8c1f32ec9dce2f187db9476e12d4f871a332ba6d9842fd6eb6d2ac6bf576dad79522eae783
5
+ SHA1:
6
+ metadata.gz: ff579897e68c118a67fe037962f318c2a265e851
7
+ data.tar.gz: a82bad8bbf4ce498aac49d8b1f54c42047ee6b15
data/README.md CHANGED
@@ -36,7 +36,7 @@ Resque::StuckQueue.config[:trigger_timeout] = 10.hours
36
36
  #
37
37
  # triggering will update the key, so you'll have to wait the trigger_timeout again
38
38
  # in order for it to trigger again even if workers are still stale.
39
- Resque::StuckQueue.config[:handler] = proc { send_email }
39
+ Resque::StuckQueue.config[:handler] = proc { |queue_name| send_email("queue #{queue_name} isnt working, aaah the daemons") }
40
40
 
41
41
  # optional, in case you want to set your own name for the key that will be used as the last good hearbeat time
42
42
  # note this will be namespaced under the specific queue it's monitoring, for eg "app:name-the-refresh-key-as-you-please"
@@ -94,7 +94,7 @@ namespace :resque do
94
94
 
95
95
  Resque::StuckQueue.config[:heartbeat] = 10.minutes
96
96
  Resque::StuckQueue.config[:trigger_timeout] = 1.hour
97
- Resque::StuckQueue.config[:handler] = proc { $stderr.puts("resque wonky!") }
97
+ Resque::StuckQueue.config[:handler] = proc { |queue_name| $stderr.puts("resque queue #{queue_name} wonky!") }
98
98
 
99
99
  Resque::StuckQueue.start # blocking operation, daemon running
100
100
  end
@@ -133,3 +133,4 @@ Resque::StuckQueue.config[:refresh_job] = proc {
133
133
  Run the tests:
134
134
 
135
135
  `bundle; bundle exec rake`
136
+ `RESQUE_2=1 bundle exec rake # for resq 2 compat`
@@ -14,7 +14,7 @@ module Resque
14
14
  GLOBAL_KEY = "resque-stuck-queue"
15
15
  HEARTBEAT = 60 * 60 # check/refresh every hour
16
16
  TRIGGER_TIMEOUT = 5 * 60 * 60 # warn/trigger 5 hours
17
- HANDLER = proc { $stdout.puts("Shit gone bad with them queues.") }
17
+ HANDLER = proc { |queue_name| $stdout.puts("Shit gone bad with them queues...on #{queue_name}.") }
18
18
 
19
19
  class << self
20
20
 
@@ -34,7 +34,7 @@ module Resque
34
34
  # :abort_on_exception
35
35
  #
36
36
  # # default handler
37
- # config[:handler] = proc { send_mail }
37
+ # config[:handler] = proc { |queue_name| send_mail }
38
38
  #
39
39
  # # explicit redis
40
40
  # config[:redis] = Redis.new
@@ -50,6 +50,12 @@ module Resque
50
50
  @redis ||= (config[:redis] || Resque.redis)
51
51
  end
52
52
 
53
+ def redis=(rds)
54
+ # for resq2 tests
55
+ @redis = rds
56
+ Resque.redis = @redis
57
+ end
58
+
53
59
  def global_key_for(under_queue)
54
60
  "#{under_queue}:#{config[:global_key] || GLOBAL_KEY}"
55
61
  end
@@ -181,7 +187,7 @@ module Resque
181
187
  end
182
188
 
183
189
  def trigger_handler(queue_name)
184
- (config[:handler] || HANDLER).call
190
+ (config[:handler] || HANDLER).call(queue_name)
185
191
  manual_refresh(queue_name)
186
192
  rescue => e
187
193
  logger.info("handler for #{queue_name} crashed: #{e.inspect}")
@@ -1,5 +1,5 @@
1
1
  module Resque
2
2
  module StuckQueue
3
- VERSION = "0.0.10"
3
+ VERSION = "0.0.11"
4
4
  end
5
5
  end
@@ -3,6 +3,7 @@ class SetRedisKey
3
3
  NAME = "integration_test"
4
4
  @queue = :app
5
5
  def self.perform
6
- Resque.redis.set(NAME, "1")
6
+ # tests run on localhost
7
+ Redis.new.set(NAME, "1")
7
8
  end
8
9
  end
@@ -5,18 +5,19 @@ class TestCollision < Minitest::Test
5
5
  include TestHelper
6
6
 
7
7
  def setup
8
- Resque.redis.flushall
8
+ Resque::StuckQueue.redis = Redis.new
9
+ Resque::StuckQueue.redis.flushall
9
10
  end
10
11
 
11
12
  def test_two_processes_interacting
12
13
  puts "#{__method__}"
13
14
  # no resque should be running here so timeouts will be reached + trigger
14
- Resque.redis.del("test-incr-key")
15
+ Resque::StuckQueue.redis.del("test-incr-key")
15
16
 
16
- p1 = fork { Resque.redis.client.reconnect; run_resque_stuck_daemon; }
17
- p2 = fork { Resque.redis.client.reconnect; run_resque_stuck_daemon; }
18
- p3 = fork { Resque.redis.client.reconnect; run_resque_stuck_daemon; }
19
- p4 = fork { Resque.redis.client.reconnect; run_resque_stuck_daemon; }
17
+ p1 = fork { Resque::StuckQueue.redis.client.reconnect; run_resque_stuck_daemon; }
18
+ p2 = fork { Resque::StuckQueue.redis.client.reconnect; run_resque_stuck_daemon; }
19
+ p3 = fork { Resque::StuckQueue.redis.client.reconnect; run_resque_stuck_daemon; }
20
+ p4 = fork { Resque::StuckQueue.redis.client.reconnect; run_resque_stuck_daemon; }
20
21
 
21
22
  Thread.new {
22
23
  sleep 5 # let test run and trigger once occur (according to time below)
@@ -29,7 +30,7 @@ class TestCollision < Minitest::Test
29
30
 
30
31
  Process.waitall
31
32
 
32
- assert_equal 1, Resque.redis.get("test-incr-key").to_i
33
+ assert_equal 1, Resque::StuckQueue.redis.get("test-incr-key").to_i
33
34
  end
34
35
 
35
36
  private
@@ -38,7 +39,7 @@ class TestCollision < Minitest::Test
38
39
  Resque::StuckQueue.config[:heartbeat] = 1
39
40
  Resque::StuckQueue.config[:abort_on_exception] = true
40
41
  Resque::StuckQueue.config[:trigger_timeout] = 3
41
- Resque::StuckQueue.config[:handler] = proc { Resque.redis.incr("test-incr-key") }
42
+ Resque::StuckQueue.config[:handler] = proc { Resque::StuckQueue.redis.incr("test-incr-key") }
42
43
  Resque::StuckQueue.start
43
44
  end
44
45
 
@@ -25,11 +25,14 @@ class TestIntegration < Minitest::Test
25
25
  # ps aux |grep resqu |awk '{print $2}' | xargs kill
26
26
 
27
27
  def setup
28
+ Resque::StuckQueue.redis = Redis.new
29
+ Resque::StuckQueue.redis.flushall
30
+ Resque::StuckQueue.config[:abort_on_exception] = true
28
31
  end
29
32
 
30
33
  def teardown
31
34
  `kill -9 #{@resque_pid}` # CONT falls throughs sometimes? hax, rm this and SIGSTOP/SIGCONT
32
- Resque::StuckQueue.stop
35
+ Resque::StuckQueue.force_stop!
33
36
  Process.waitpid(@resque_pid)
34
37
  end
35
38
 
@@ -43,10 +46,10 @@ class TestIntegration < Minitest::Test
43
46
 
44
47
  # job gets enqueued successfully
45
48
  @resque_pid = run_resque
46
- Resque.redis.del(SetRedisKey::NAME)
47
- Resque.enqueue(SetRedisKey)
49
+ Resque::StuckQueue.redis.del(SetRedisKey::NAME)
50
+ Resque.enqueue_to(:app, SetRedisKey)
48
51
  sleep 6 # let resque pick up the job
49
- assert_equal Resque.redis.get(SetRedisKey::NAME), "1"
52
+ assert_equal Resque::StuckQueue.redis.get(SetRedisKey::NAME), "1" # job ran
50
53
 
51
54
  # check handler did not get called
52
55
  assert_equal @triggered, false
@@ -62,10 +65,10 @@ class TestIntegration < Minitest::Test
62
65
 
63
66
  # job gets enqueued successfully
64
67
  @resque_pid = run_resque
65
- Resque.redis.del(SetRedisKey::NAME)
68
+ Resque::StuckQueue.redis.del(SetRedisKey::NAME)
66
69
  Process.kill("SIGSTOP", @resque_pid) # jic, do not process jobs so we definitely trigger
67
70
  Resque.enqueue(SetRedisKey)
68
- assert_equal Resque.redis.get(SetRedisKey::NAME), nil
71
+ assert_equal Resque::StuckQueue.redis.get(SetRedisKey::NAME), nil
69
72
  sleep 2 # allow timeout to trigger
70
73
 
71
74
  # check handler did get called
@@ -8,12 +8,13 @@ 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.redis.flushall
11
+ Resque::StuckQueue.redis = Redis.new
12
+ Resque::StuckQueue.redis.flushall
12
13
  end
13
14
 
14
15
  def teardown
15
16
  `kill -9 #{@resque_pid}` if @resque_pid
16
- Resque::StuckQueue.stop
17
+ Resque::StuckQueue.force_stop!
17
18
  Process.waitpid(@resque_pid) if @resque_pid
18
19
  end
19
20
 
@@ -35,8 +36,9 @@ class TestNamedQueues < Minitest::Test
35
36
  puts "#{__method__}"
36
37
  Resque::StuckQueue.config[:trigger_timeout] = 2 # won't allow waiting too much and will complain (eg trigger) sooner than later
37
38
  Resque::StuckQueue.config[:heartbeat] = 1
39
+ Resque::StuckQueue.config[:queues] = [:custom_queue_name]
38
40
  @triggered = false
39
- Resque::StuckQueue.config[:handler] = proc { @triggered = true }
41
+ Resque::StuckQueue.config[:handler] = proc { |queue_name| @triggered = queue_name }
40
42
  Resque::StuckQueue.start_in_background
41
43
 
42
44
  # job gets enqueued successfully
@@ -44,7 +46,7 @@ class TestNamedQueues < Minitest::Test
44
46
  sleep 2 # allow timeout to trigger
45
47
 
46
48
  # check handler did get called
47
- assert_equal @triggered, true
49
+ assert_equal @triggered, :custom_queue_name
48
50
  end
49
51
 
50
52
  def test_resque_enqueues_a_job_correct_queue_does_not_trigger
@@ -16,12 +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
20
  Redis.new.flushall
20
21
  end
21
22
 
22
23
  def test_works_with_2_point_oh_do_not_trigger_because_key_is_updated
23
24
 
24
- Resque.redis = Redis.new
25
+ Resque::StuckQueue.redis = Redis.new
25
26
 
26
27
  Resque::StuckQueue.config[:heartbeat] = 1
27
28
  Resque::StuckQueue.config[:abort_on_exception] = true
@@ -33,7 +34,7 @@ if !ENV['RESQUE_2'].nil?
33
34
  #binding.pry
34
35
  Resque::StuckQueue.start_in_background
35
36
 
36
- @r2_pid = fork { Resque.redis = Redis.new ; Resque::Worker.new("*", :graceful_term => true).work ; Process.waitall }
37
+ @r2_pid = fork { Resque::StuckQueue.redis = Redis.new ; Resque::Worker.new("*", :graceful_term => true).work ; Process.waitall }
37
38
  sleep 10
38
39
 
39
40
  # did not trigger, resque picked up refresh jobs
@@ -13,17 +13,18 @@ class TestResqueStuckQueue < Minitest::Test
13
13
  def setup
14
14
  puts "#{__method__}"
15
15
  # clean previous test runs
16
- Resque.redis.flushall
16
+ Resque::StuckQueue.redis = Redis.new
17
+ Resque::StuckQueue.redis.flushall
17
18
  Resque::StuckQueue.config[:heartbeat] = 1 # seconds
18
19
  Resque::StuckQueue.config[:abort_on_exception] = true
19
20
  end
20
21
 
21
22
  def test_configure_global_key
22
23
  puts "#{__method__}"
23
- assert_nil Resque.redis.get("it-is-configurable"), "global key should not be set"
24
+ assert_nil Resque::StuckQueue.redis.get("it-is-configurable"), "global key should not be set"
24
25
  Resque::StuckQueue.config[:global_key] = "it-is-configurable"
25
26
  start_and_stop_loops_after(2)
26
- refute_nil Resque.redis.get("app:it-is-configurable"), "global key should be set"
27
+ refute_nil Resque::StuckQueue.redis.get("app:it-is-configurable"), "global key should be set"
27
28
  end
28
29
 
29
30
  def test_it_does_not_trigger_handler_if_under_max_time
@@ -9,7 +9,8 @@ class TestYourOwnRefreshJob < Minitest::Test
9
9
  Resque::StuckQueue.config[:heartbeat] = 1
10
10
  Resque::StuckQueue.config[:abort_on_exception] = true
11
11
  Resque::StuckQueue.config[:refresh_job] = nil
12
- Resque.redis.flushall
12
+ Resque::StuckQueue.redis = Redis.new
13
+ Resque::StuckQueue.redis.flushall
13
14
  end
14
15
 
15
16
  def teardown
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.0.10
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shai Rosenfeld