class Scaltainer::ServiceTypeBase
Public Class Methods
new(app_endpoint)
click to toggle source
# File lib/scaltainer/service_types/base.rb, line 3 def initialize(app_endpoint) @app_endpoint = app_endpoint.sub('$HIREFIRE_TOKEN', ENV['HIREFIRE_TOKEN'] || '') if app_endpoint end
Public Instance Methods
adjust_desired_replicas(desired_replicas, config)
click to toggle source
# File lib/scaltainer/service_types/base.rb, line 17 def adjust_desired_replicas(desired_replicas, config) desired_replicas = [config["max"], desired_replicas].min if config["max"] [config["min"], desired_replicas].max end
determine_desired_replicas(metric, service_config, current_replicas)
click to toggle source
# File lib/scaltainer/service_types/base.rb, line 12 def determine_desired_replicas(metric, service_config, current_replicas) raise ConfigurationError.new 'No metric found for requested resource' unless metric raise ConfigurationError.new 'No configuration found for requested resource' unless service_config end
get_metrics(services)
click to toggle source
# File lib/scaltainer/service_types/base.rb, line 7 def get_metrics(services) services_count = services.keys.length rescue 0 raise Scaltainer::Warning.new "No resources found for #{self.class.name}" if services_count == 0 end
to_s()
click to toggle source
# File lib/scaltainer/service_types/base.rb, line 62 def to_s "Base" end
yield_to_scale(replica_diff, config, state, metric, service_name, logger) { || ... }
click to toggle source
# File lib/scaltainer/service_types/base.rb, line 22 def yield_to_scale(replica_diff, config, state, metric, service_name, logger) # Force up/down when below/above min/max? # one could argue that this could only happen on first deployment or when manually # scaled outside the scope of scaltainer. It is OK in this case to still apply sensitivity rules if replica_diff > 0 # breach: change state and scale up state["upscale_sensitivity"] ||= 0 state["upscale_sensitivity"] += 1 state["downscale_sensitivity"] = 0 if state["upscale_sensitivity"] >= config["upscale_sensitivity"] yield state["upscale_sensitivity"] = 0 else logger.debug "Scaling up of resource #{service_name} blocked by upscale_sensitivity at level " + "#{state["upscale_sensitivity"]} while level #{config["upscale_sensitivity"]} is required" end elsif replica_diff < 0 # TODO force down when above max? # breach: change state and scale down if can_scale_down? metric, config state["downscale_sensitivity"] ||= 0 state["downscale_sensitivity"] += 1 state["upscale_sensitivity"] = 0 if state["downscale_sensitivity"] >= config["downscale_sensitivity"] yield state["downscale_sensitivity"] = 0 else logger.debug "Scaling down of resource #{service_name} blocked by downscale_sensitivity at level " + "#{state["downscale_sensitivity"]} while level #{config["downscale_sensitivity"]} is required" end else logger.debug "Scaling down of resource #{service_name} to #{metric} replicas blocked by a non-decrementable config" end else # no breach, change state state["upscale_sensitivity"] = 0 state["downscale_sensitivity"] = 0 logger.info "No need to scale resource #{service_name}" end end
Private Instance Methods
can_scale_down?(metric, config)
click to toggle source
# File lib/scaltainer/service_types/base.rb, line 68 def can_scale_down?(metric, config) self.class == ServiceTypeWeb || metric == 0 || config["decrementable"] end