Class: SidekiqEcsScaler::Client
- Inherits:
-
Object
- Object
- SidekiqEcsScaler::Client
- Defined in:
- lib/sidekiq-ecs-scaler/client.rb
Overview
SidekiqEcsScaler::Client
Instance Attribute Summary collapse
- #config ⇒ SidekiqEcsScaler::Configuration readonly private
Instance Method Summary collapse
- #change_log(before_count, after_count) ⇒ void private
- #describe_service ⇒ Aws::ECS::Types::Service private
- #desired_count_by_latency ⇒ Integer private
- #initialize(config) ⇒ void constructor
- #not_change_log(count) ⇒ void private
- #queue_latency ⇒ Float private
- #service_name ⇒ String private
- #update_desired_count ⇒ Integer?
- #update_service(service:, desired_count:) ⇒ Aws::ECS::Types::UpdateServiceResponse private
Constructor Details
#initialize(config) ⇒ void
8 9 10 |
# File 'lib/sidekiq-ecs-scaler/client.rb', line 8 def initialize(config) @config = config end |
Instance Attribute Details
#config ⇒ SidekiqEcsScaler::Configuration (readonly, private)
33 34 35 |
# File 'lib/sidekiq-ecs-scaler/client.rb', line 33 def config @config end |
Instance Method Details
#change_log(before_count, after_count) ⇒ void (private)
This method returns an undefined value.
87 88 89 90 91 |
# File 'lib/sidekiq-ecs-scaler/client.rb', line 87 def change_log(before_count, after_count) config.logger.info( "SidekiqEcsScaler has updated the desired count of tasks from #{before_count} to #{after_count}." ) end |
#describe_service ⇒ Aws::ECS::Types::Service (private)
59 60 61 62 63 |
# File 'lib/sidekiq-ecs-scaler/client.rb', line 59 def describe_service config.ecs_client.describe_services( { cluster: config..cluster, services: [service_name] } ).services.first || (raise Error, "Service(#{service_name}) does not exist in cluster!") end |
#desired_count_by_latency ⇒ Integer (private)
41 42 43 44 45 |
# File 'lib/sidekiq-ecs-scaler/client.rb', line 41 def desired_count_by_latency (config.min_count..config.max_count).to_a.at( (queue_latency.to_f / config.latency_per_count).floor.to_i ) || config.max_count end |
#not_change_log(count) ⇒ void (private)
This method returns an undefined value.
80 81 82 |
# File 'lib/sidekiq-ecs-scaler/client.rb', line 80 def not_change_log(count) config.logger.info("SidekiqEcsScaler doesn't have updated the desired count of tasks from #{count}.") end |
#queue_latency ⇒ Float (private)
36 37 38 |
# File 'lib/sidekiq-ecs-scaler/client.rb', line 36 def queue_latency Sidekiq::Queue.new(config.queue_name).latency end |
#service_name ⇒ String (private)
48 49 50 51 52 53 54 55 56 |
# File 'lib/sidekiq-ecs-scaler/client.rb', line 48 def service_name config..then do || config.ecs_client.describe_tasks( { cluster: .cluster, tasks: [.task_arn] } ).tasks.first&.then { |task| task.group.delete_prefix("service:") } || ( raise Error, "Task(#{task_meta.task_arn}) does not exist in cluster!" ) end end |
#update_desired_count ⇒ Integer?
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/sidekiq-ecs-scaler/client.rb', line 13 def update_desired_count return if !config.enabled || config..nil? desired_count = desired_count_by_latency service = describe_service if service.desired_count == desired_count not_change_log(desired_count) else update_service(service: service, desired_count: desired_count) change_log(service.desired_count, desired_count) end desired_count end |
#update_service(service:, desired_count:) ⇒ Aws::ECS::Types::UpdateServiceResponse (private)
68 69 70 71 72 73 74 75 76 |
# File 'lib/sidekiq-ecs-scaler/client.rb', line 68 def update_service(service:, desired_count:) config.ecs_client.update_service( { cluster: service.cluster_arn, service: service.service_name, desired_count: desired_count } ) end |