lib/sidekiq-heroku-scaler/strategy/latency.rb in sidekiq-heroku-scaler-0.3.5 vs lib/sidekiq-heroku-scaler/strategy/latency.rb in sidekiq-heroku-scaler-0.4.0

- old
+ new

@@ -1,28 +1,31 @@ # frozen_string_literal: true module SidekiqHerokuScaler module Strategy class Latency - attr_reader :inc_count, :dec_count + attr_reader :inc_count, :dec_count, :smart_decrease + # rubocop:disable Metrics/ParameterLists def initialize(min_dynos_count:, max_dynos_count:, max_latency:, min_latency:, - inc_count: nil, dec_count: nil) + inc_count: nil, dec_count: nil, + smart_decrease: false) @min_dynos_count = min_dynos_count @max_dynos_count = max_dynos_count @max_latency = max_latency @min_latency = min_latency @inc_count = (inc_count || 1).to_i @dec_count = (dec_count || 1).to_i + @smart_decrease = smart_decrease end + # rubocop:enable Metrics/ParameterLists def increase?(sidekiq_worker) sidekiq_worker.quantity < max_dynos_count && (sidekiq_worker.latency > max_latency || - (sidekiq_worker.quantity.zero? && sidekiq_worker.latency.positive?)) && - sidekiq_worker.queues_size > sidekiq_worker.quantity * sidekiq_worker.concurrency + (sidekiq_worker.quantity.zero? && sidekiq_worker.latency.positive?)) end def decrease?(sidekiq_worker) sidekiq_worker.quantity > min_dynos_count && sidekiq_worker.latency < min_latency && @@ -31,10 +34,10 @@ end def safe_quantity(quantity) return min_dynos_count if quantity < min_dynos_count - quantity > max_dynos_count ? max_dynos_count : quantity + [quantity, max_dynos_count].min end private attr_reader :min_dynos_count, :max_dynos_count, :max_latency, :min_latency