class Resque::Plugins::Director::Scaler
Public Class Methods
scale_down(number_of_workers=1)
click to toggle source
# File lib/resque/plugins/director/scaler.rb, line 14 def scale_down(number_of_workers=1) number_of_workers = WorkerTracker.total_to_remove(number_of_workers) scaling(number_of_workers) do stop(number_of_workers) end end
scale_down_to_minimum()
click to toggle source
# File lib/resque/plugins/director/scaler.rb, line 21 def scale_down_to_minimum number_of_workers = WorkerTracker.total_to_go_to_minimum stop(number_of_workers) end
scale_up(number_of_workers=1)
click to toggle source
# File lib/resque/plugins/director/scaler.rb, line 7 def scale_up(number_of_workers=1) number_of_workers = WorkerTracker.total_to_add(number_of_workers) scaling(number_of_workers) do start(number_of_workers) end end
scale_within_requirements()
click to toggle source
# File lib/resque/plugins/director/scaler.rb, line 26 def scale_within_requirements number_of_workers = WorkerTracker.total_for_requirements if number_of_workers > 0 set_last_scaled unless start(number_of_workers) == false elsif number_of_workers < 0 set_last_scaled unless stop(number_of_workers * -1) == false end end
scaling(number_of_workers=1) { |== false| ... }
click to toggle source
# File lib/resque/plugins/director/scaler.rb, line 35 def scaling(number_of_workers=1) return unless time_to_scale? && number_of_workers > 0 set_last_scaled unless yield == false end
Private Class Methods
override(number_of_workers, override_block)
click to toggle source
# File lib/resque/plugins/director/scaler.rb, line 65 def override(number_of_workers, override_block) number_of_workers.times {override_block.call(Config.queue) } end
set_last_scaled()
click to toggle source
# File lib/resque/plugins/director/scaler.rb, line 42 def set_last_scaled Resque.redis.set("last_scaled_#{[Config.queue].flatten.join('')}", Time.now.utc.to_i) end
start(number_of_workers)
click to toggle source
# File lib/resque/plugins/director/scaler.rb, line 53 def start(number_of_workers) Config.log("starting #{number_of_workers} workers on queue:#{Config.queue}") if number_of_workers > 0 return override(number_of_workers, Config.start_override) if Config.start_override start_default(number_of_workers) end
start_default(number_of_workers)
click to toggle source
# File lib/resque/plugins/director/scaler.rb, line 69 def start_default(number_of_workers) number_of_workers.times { system("QUEUE=#{[Config.queue].flatten.join(",")} rake resque:work &") } end
stop(number_of_workers)
click to toggle source
# File lib/resque/plugins/director/scaler.rb, line 59 def stop(number_of_workers) Config.log("stopping #{number_of_workers} workers on queue:#{Config.queue}") if number_of_workers > 0 return override(number_of_workers, Config.stop_override) if Config.stop_override stop_default(number_of_workers) end
stop_default(number_of_workers)
click to toggle source
# File lib/resque/plugins/director/scaler.rb, line 73 def stop_default(number_of_workers) worker_pids = WorkerTracker.valid_worker_pids[0...number_of_workers] worker_pids.each do |pid| Process.kill("QUIT", pid) rescue nil end end
time_to_scale?()
click to toggle source
# File lib/resque/plugins/director/scaler.rb, line 46 def time_to_scale? last_time = Resque.redis.get("last_scaled_#{[Config.queue].flatten.join('')}") return true if last_time.nil? time_passed = (Time.now.utc - Time.at(last_time.to_i).utc) time_passed >= Config.wait_time end