Class: HerokuAutoScale::Manager

Inherits:
Object
  • Object
show all
Defined in:
lib/heroku_auto_scale/manager.rb

Constant Summary collapse

MNGR_ATTRIBUTES =
[
  :process_name,
  :queue_name,
  :redis_operations,
  :heroku_operations,
  :min_dynos,
  :max_dynos,
  :scaling_step
].freeze

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Manager

Returns a new instance of Manager.



21
22
23
24
25
26
27
28
29
# File 'lib/heroku_auto_scale/manager.rb', line 21

def initialize(options={})
  options = HerokuAutoScale.options.merge(options)
  Configuration::CONFIGURATION_OPTIONS.each do |key|
    send("#{key}=", options[key])
  end

  init_redis_operations
  init_heroku_operations
end

Instance Method Details

#calculate_number_of_needed_dynosObject



60
61
62
63
64
65
66
# File 'lib/heroku_auto_scale/manager.rb', line 60

def calculate_number_of_needed_dynos
  current_jobs = get_number_of_jobs_inside_queue
  dynos = (current_jobs.to_f / scaling_step.to_f).ceil

  scale_to = [dynos, max_dynos].min
  scale_to = [scale_to, min_dynos].max
end

#get_number_of_jobs_inside_queueObject



31
32
33
# File 'lib/heroku_auto_scale/manager.rb', line 31

def get_number_of_jobs_inside_queue
  redis_operations.check_queue_for_jobs(@queue_name)
end

#manage_queueObject



55
56
57
58
# File 'lib/heroku_auto_scale/manager.rb', line 55

def manage_queue
  scale_to = calculate_number_of_needed_dynos
  heroku_operations.execute_dyno_scale(process_name, scale_to)
end

#set_max_dynos(max_dynos) ⇒ Object



47
48
49
# File 'lib/heroku_auto_scale/manager.rb', line 47

def set_max_dynos(max_dynos)
  @max_dynos = max_dynos
end

#set_min_dynos(min_dynos) ⇒ Object



43
44
45
# File 'lib/heroku_auto_scale/manager.rb', line 43

def set_min_dynos(min_dynos)
  @min_dynos = min_dynos
end

#set_process_name(process_name) ⇒ Object



35
36
37
# File 'lib/heroku_auto_scale/manager.rb', line 35

def set_process_name(process_name)
  @process_name = process_name
end

#set_queue_name(queue_name) ⇒ Object



39
40
41
# File 'lib/heroku_auto_scale/manager.rb', line 39

def set_queue_name(queue_name)
  @queue_name = queue_name
end

#set_scaling_step(scaling_step) ⇒ Object



51
52
53
# File 'lib/heroku_auto_scale/manager.rb', line 51

def set_scaling_step(scaling_step)
  @scaling_step = scaling_step
end