class SidekiqEcsScaler::Client
Attributes
config[R]
@!attribute [r] config @return [SidekiqEcsScaler::Configuration]
Public Class Methods
new(config)
click to toggle source
@param config [SidekiqEcsScaler::Configuration] @return [void]
# File lib/sidekiq-ecs-scaler/client.rb, line 8 def initialize(config) @config = config end
Public Instance Methods
update_desired_count()
click to toggle source
@return [Integer, nil]
# File lib/sidekiq-ecs-scaler/client.rb, line 13 def update_desired_count return if !config.enabled || config.task_meta.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
Private Instance Methods
change_log(before_count, after_count)
click to toggle source
@param before_count [Integer] @param after_count [Integer] @return [void]
# 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()
click to toggle source
@return [Aws::ECS::Types::Service]
# File lib/sidekiq-ecs-scaler/client.rb, line 59 def describe_service config.ecs_client.describe_services( { cluster: config.task_meta!.cluster, services: [service_name] } ).services.first || (raise Error, "Service(#{service_name}) does not exist in cluster!") end
desired_count_by_latency()
click to toggle source
@return [Integer]
# 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)
click to toggle source
@param count [Integer] @return [void]
# 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()
click to toggle source
@return [Float]
# File lib/sidekiq-ecs-scaler/client.rb, line 36 def queue_latency Sidekiq::Queue.new(config.queue_name).latency end
service_name()
click to toggle source
@return [String]
# File lib/sidekiq-ecs-scaler/client.rb, line 48 def service_name config.task_meta!.then do |task_meta| config.ecs_client.describe_tasks( { cluster: task_meta.cluster, tasks: [task_meta.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_service(service:, desired_count:)
click to toggle source
@param service [Aws::ECS::Types::Service] @param desired_count [Integer] @return [Aws::ECS::Types::UpdateServiceResponse]
# 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