module Resque::Plugins::Director

Public Instance Methods

after_enqueue_scale_workers(*args) click to toggle source
# File lib/resque/plugins/director.rb, line 21
def after_enqueue_scale_workers(*args)
  set_queue
  return if Config.no_enqueue_scale
  Scaler.scale_within_requirements
end
after_perform_direct_workers(*args) click to toggle source
# File lib/resque/plugins/director.rb, line 46
def after_perform_direct_workers(*args)
  set_queue
  jobs_in_queue = Resque.size(@queue.to_s)
  Scaler.scale_down_to_minimum if jobs_in_queue == 0
end
after_pop_direct_workers(start_time=Time.now.utc) click to toggle source
# File lib/resque/plugins/director.rb, line 32
def after_pop_direct_workers(start_time=Time.now.utc)
  return unless scaling_config_set?
  set_queue
  
  time_through_queue = Time.now.utc - start_time
  jobs_in_queue = Resque.size(@queue.to_s)

  if scale_up?(time_through_queue, jobs_in_queue)
    Scaler.scale_up
  elsif scale_down?(time_through_queue, jobs_in_queue)
    Scaler.scale_down
  end
end
attach_remora() click to toggle source
# File lib/resque/plugins/director.rb, line 6
def attach_remora
  {:created_at => Time.now.utc.to_i}
end
before_perform_direct_workers(*args) click to toggle source
# File lib/resque/plugins/director.rb, line 27
def before_perform_direct_workers(*args)
  set_queue
  Scaler.scale_within_requirements if Config.no_enqueue_scale
end
direct(options={}) click to toggle source
# File lib/resque/plugins/director.rb, line 16
def direct(options={})
  Config.setup(options)
  Config.queue = options[:queue]
end
on_failure_direct_workers(*args) click to toggle source
# File lib/resque/plugins/director.rb, line 52
def on_failure_direct_workers(*args)
  set_queue
  jobs_in_queue = Resque.size(@queue.to_s)
  Scaler.scale_down_to_minimum if jobs_in_queue == 0
end
process_remora(queue, job) click to toggle source
# File lib/resque/plugins/director.rb, line 10
def process_remora(queue, job)
  timestamp = job['created_at']
  start_time = timestamp.nil? ? Time.now.utc : Time.at(timestamp.to_i).utc
  after_pop_direct_workers(start_time)
end

Private Instance Methods

scale_down?(time_through_queue, jobs_in_queue) click to toggle source
# File lib/resque/plugins/director.rb, line 74
def scale_down?(time_through_queue, jobs_in_queue)
  time_limits =  Config.max_time > 0 && time_through_queue < (Config.max_time/2)
  queue_limits = Config.max_queue > 0 && jobs_in_queue < (Config.max_queue/2) 
  (Config.max_time <= 0 || time_limits) && (Config.max_queue <= 0 || queue_limits)
end
scale_up?(time_through_queue, jobs_in_queue) click to toggle source
# File lib/resque/plugins/director.rb, line 68
def scale_up?(time_through_queue, jobs_in_queue)
  time_limits =  Config.max_time > 0 && time_through_queue > Config.max_time 
  queue_limits = Config.max_queue > 0 && jobs_in_queue > Config.max_queue
  time_limits || queue_limits
end
scaling_config_set?() click to toggle source
# File lib/resque/plugins/director.rb, line 64
def scaling_config_set?
  Config.max_time > 0 || Config.max_queue > 0
end
set_queue() click to toggle source
# File lib/resque/plugins/director.rb, line 60
def set_queue
  Config.queue ||= @queue.to_s
end