Class: HipstaScale::Application
- Inherits:
-
Object
- Object
- HipstaScale::Application
- Defined in:
- lib/hipsta_scale/application.rb
Instance Attribute Summary collapse
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Instance Method Summary collapse
-
#current_load ⇒ Object
We take what NewRelic returns us and add an extra 20% to it base on the recommendation of this blog post: engineering.viki.com/2011/08/10/autoscaling-heroku-dynos/.
- #heroku_key(key = nil) ⇒ Object
- #heroku_ps(name = nil) ⇒ Object
-
#initialize(name, &block) ⇒ Application
constructor
A new instance of Application.
- #interval(interval = nil) ⇒ Object
- #load_limit(load = nil) ⇒ Object
- #minimum_processes(minimum = nil) ⇒ Object (also: #minimum_process)
- #new_relic_id(id = nil) ⇒ Object
- #new_relic_key(key = nil) ⇒ Object
- #processes_needed ⇒ Object
- #processes_running ⇒ Object
- #scale(count) ⇒ Object
- #scale! ⇒ Object
- #tick(&block) ⇒ Object
Constructor Details
#initialize(name, &block) ⇒ Application
Returns a new instance of Application.
5 6 7 8 |
# File 'lib/hipsta_scale/application.rb', line 5 def initialize(name, &block) @name = name instance_eval(&block) if block_given? end |
Instance Attribute Details
#name ⇒ Object (readonly)
Returns the value of attribute name.
3 4 5 |
# File 'lib/hipsta_scale/application.rb', line 3 def name @name end |
Instance Method Details
#current_load ⇒ Object
We take what NewRelic returns us and add an extra 20% to it base on the recommendation of this blog post: engineering.viki.com/2011/08/10/autoscaling-heroku-dynos/
13 14 15 |
# File 'lib/hipsta_scale/application.rb', line 13 def current_load (new_relic.busy_percent + 20.0) / 100 end |
#heroku_key(key = nil) ⇒ Object
17 18 19 20 |
# File 'lib/hipsta_scale/application.rb', line 17 def heroku_key(key=nil) @heroku_key = key unless key.nil? @heroku_key || HipstaScale.heroku_key end |
#heroku_ps(name = nil) ⇒ Object
22 23 24 25 |
# File 'lib/hipsta_scale/application.rb', line 22 def heroku_ps(name=nil) @heroku_ps = name unless name.nil? @heroku_ps || HipstaScale.heroku_ps end |
#interval(interval = nil) ⇒ Object
27 28 29 30 |
# File 'lib/hipsta_scale/application.rb', line 27 def interval(interval=nil) @interval = interval unless interval.nil? @interval || HipstaScale.interval end |
#load_limit(load = nil) ⇒ Object
32 33 34 35 |
# File 'lib/hipsta_scale/application.rb', line 32 def load_limit(load=nil) @load_limit = load unless load.nil? @load_limit || HipstaScale.load_limit end |
#minimum_processes(minimum = nil) ⇒ Object Also known as: minimum_process
37 38 39 40 |
# File 'lib/hipsta_scale/application.rb', line 37 def minimum_processes(minimum=nil) @minimum_processes = minimum unless minimum.nil? @minimum_processes || HipstaScale.minimum_processes end |
#new_relic_id(id = nil) ⇒ Object
43 44 45 46 |
# File 'lib/hipsta_scale/application.rb', line 43 def new_relic_id(id=nil) @new_relic_id = id unless id.nil? @new_relic_id end |
#new_relic_key(key = nil) ⇒ Object
48 49 50 51 |
# File 'lib/hipsta_scale/application.rb', line 48 def new_relic_key(key=nil) @new_relic_key = key unless key.nil? @new_relic_key || HipstaScale.new_relic_key end |
#processes_needed ⇒ Object
57 58 59 60 61 62 |
# File 'lib/hipsta_scale/application.rb', line 57 def processes_needed processes = ((processes_running * current_load) / load_limit).ceil processes = minimum_processes if processes < minimum_processes processes = maximum_processes if processes > maximum_processes processes end |
#processes_running ⇒ Object
53 54 55 |
# File 'lib/hipsta_scale/application.rb', line 53 def processes_running heroku.processes.count end |
#scale(count) ⇒ Object
64 65 66 |
# File 'lib/hipsta_scale/application.rb', line 64 def scale(count) heroku.scale_processes(count) end |
#scale! ⇒ Object
68 69 70 |
# File 'lib/hipsta_scale/application.rb', line 68 def scale! scale(processes_needed) end |
#tick(&block) ⇒ Object
72 73 74 75 |
# File 'lib/hipsta_scale/application.rb', line 72 def tick(&block) block.call expire! end |