Class: EcsDeploy::AutoScaler::ServiceConfig

Inherits:
Struct
  • Object
show all
Includes:
ConfigBase
Defined in:
lib/ecs_deploy/auto_scaler/service_config.rb

Constant Summary collapse

MAX_DESCRIBABLE_TASK_COUNT =
100

Instance Method Summary collapse

Methods included from ConfigBase

#logger

Constructor Details

#initialize(attributes = {}, logger) ⇒ ServiceConfig

Returns a new instance of ServiceConfig.



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/ecs_deploy/auto_scaler/service_config.rb', line 14

def initialize(attributes = {}, logger)
  super
  self.idle_time ||= 60
  self.max_task_count = Array(max_task_count)
  self.upscale_triggers = upscale_triggers.to_a.map do |t|
    TriggerConfig.new({"region" => region, "step" => step}.merge(t), logger)
  end
  self.downscale_triggers = downscale_triggers.to_a.map do |t|
    TriggerConfig.new({"region" => region, "step" => step}.merge(t), logger)
  end
  self.max_task_count.sort!
  self.desired_count = fetch_service.desired_count
  self.required_capacity ||= 1
  @reach_max_at = nil
  @last_updated_at = nil
  @logger = logger
end

Instance Method Details

#adjust_desired_count(cluster_resource_manager) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/ecs_deploy/auto_scaler/service_config.rb', line 32

def adjust_desired_count(cluster_resource_manager)
  if idle?
    @logger.debug "#{name} is idling"
    return
  end

  difference = 0
  upscale_triggers.each do |trigger|
    next if difference >= trigger.step

    if trigger.match?
      @logger.info "#{log_prefix} Firing upscale trigger by #{trigger.alarm_name} #{trigger.state}"
      difference = trigger.step
    end
  end

  if desired_count > current_min_task_count
    downscale_triggers.each do |trigger|
      next if difference > 0 && !trigger.prioritized_over_upscale_triggers?
      next unless trigger.match?

      @logger.info "#{log_prefix} Firing downscale trigger by #{trigger.alarm_name} #{trigger.state}"
      difference = [difference, -trigger.step].min
    end
  end

  if current_min_task_count > desired_count + difference
    difference = current_min_task_count - desired_count
  end

  if difference >= 0 && desired_count > max_task_count.max
    difference = max_task_count.max - desired_count
  end

  if difference != 0
    update_service(difference, cluster_resource_manager)
  end
end

#wait_until_desired_count_updatedObject



71
72
73
74
75
76
77
# File 'lib/ecs_deploy/auto_scaler/service_config.rb', line 71

def wait_until_desired_count_updated
  @increase_desired_count_thread&.join
rescue => e
  AutoScaler.error_logger.warn("`#{__method__}': #{e} (#{e.class})")
ensure
  @increase_desired_count_thread = nil
end