module Resque::Plugins::RateLimitedQueue
Constants
- MUTEX
- RESQUE_PREFIX
Public Instance Methods
around_perform_with_check_and_requeue(*params) { || ... }
click to toggle source
# File lib/resque/plugins/rate_limited_queue/rate_limited_queue.rb, line 7 def around_perform_with_check_and_requeue(*params) paused = false with_lock do paused = paused? Resque.enqueue_to(paused_queue_name, self, *params) if paused end return if paused yield end
find_class(klass)
click to toggle source
# File lib/resque/plugins/rate_limited_queue/rate_limited_queue.rb, line 83 def find_class(klass) return klass if klass.is_a? Class return Object.const_get(klass) unless klass.include?('::') klass.split('::').reduce(Object) do |mod, class_name| mod.const_get(class_name) end end
pause()
click to toggle source
# File lib/resque/plugins/rate_limited_queue/rate_limited_queue.rb, line 50 def pause Resque.redis.renamenx(RESQUE_PREFIX + @queue.to_s, RESQUE_PREFIX + paused_queue_name) true rescue Redis::CommandError => e raise unless e.message == 'ERR no such key' false end
pause_until(timestamp)
click to toggle source
# File lib/resque/plugins/rate_limited_queue/rate_limited_queue.rb, line 38 def pause_until(timestamp) UnPause.enqueue(timestamp, name) if pause end
paused?(unknown = false)
click to toggle source
# File lib/resque/plugins/rate_limited_queue/rate_limited_queue.rb, line 58 def paused?(unknown = false) # parameter is what to return if the queue is empty, and so the state is unknown if Resque.inline false elsif Resque.redis.exists(RESQUE_PREFIX + @queue.to_s) false elsif Resque.redis.exists(RESQUE_PREFIX + paused_queue_name) true else unknown end end
paused_queue_name()
click to toggle source
# File lib/resque/plugins/rate_limited_queue/rate_limited_queue.rb, line 71 def paused_queue_name @queue.to_s + '_paused' end
rate_limited_enqueue(klass, *params)
click to toggle source
# File lib/resque/plugins/rate_limited_queue/rate_limited_queue.rb, line 17 def rate_limited_enqueue(klass, *params) with_lock do if paused? Resque.enqueue_to(paused_queue_name, klass, *params) else Resque.enqueue_to(@queue, klass, *params) end end end
rate_limited_requeue(klass, *params)
click to toggle source
# File lib/resque/plugins/rate_limited_queue/rate_limited_queue.rb, line 27 def rate_limited_requeue(klass, *params) # if the queue is empty, this was the last job - so queue to the paused queue with_lock do if paused?(true) Resque.enqueue_to(paused_queue_name, klass, *params) else Resque.enqueue_to(@queue, klass, *params) end end end
un_pause()
click to toggle source
# File lib/resque/plugins/rate_limited_queue/rate_limited_queue.rb, line 42 def un_pause Resque.redis.renamenx(RESQUE_PREFIX + paused_queue_name, RESQUE_PREFIX + @queue.to_s) true rescue Redis::CommandError => e raise unless e.message == 'ERR no such key' false end
with_lock() { || ... }
click to toggle source
# File lib/resque/plugins/rate_limited_queue/rate_limited_queue.rb, line 75 def with_lock if Resque.inline yield else RedisMutex.with_lock(MUTEX, block: 60, expire: 120) { yield } end end