Sha256: 5d10f6a20c070c2009a436f579ab290b4294615ced6c7b19a55a8c5d2b0f137c

Contents?: true

Size: 1.17 KB

Versions: 23

Compression:

Stored size: 1.17 KB

Contents

require 'sidekiq/api'

module RooOnRails
  module Sidekiq
    class ProcessScaling
      WORKER_INCREASE_THRESHOLD = ENV.fetch('WORKER_INCREASE_THRESHOLD', 0.5).to_f
      WORKER_DECREASE_THRESHOLD = ENV.fetch('WORKER_DECREASE_THRESHOLD', 0.1).to_f
      private_constant :WORKER_INCREASE_THRESHOLD
      private_constant :WORKER_DECREASE_THRESHOLD

      def initialize(queue_latencies)
        @queue_latencies = queue_latencies
        @queue_names = @queue_latencies.map(&:name)
      end

      def current_processes
        ::Sidekiq::ProcessSet.new.count do |process|
          process['quiet'].to_s == 'false' &&
          @queue_names.any? do |queue_name|
            process['queues'].include?(queue_name)
          end
        end
      end

      def max_normalised_latency
          @queue_latencies.any? ? @queue_latencies.map(&:normalised_latency).max.to_f : 0.0
      end

      def requested_processes
        if max_normalised_latency > WORKER_INCREASE_THRESHOLD
          current_processes + 1
        elsif max_normalised_latency < WORKER_DECREASE_THRESHOLD
          [current_processes - 1, 1].max
        else
          current_processes
        end
      end
    end
  end
end

Version data entries

23 entries across 23 versions & 1 rubygems

Version Path
roo_on_rails-2.2.2 lib/roo_on_rails/sidekiq/process_scaling.rb
roo_on_rails-2.2.1 lib/roo_on_rails/sidekiq/process_scaling.rb
roo_on_rails-2.2.0 lib/roo_on_rails/sidekiq/process_scaling.rb
roo_on_rails-2.1.2 lib/roo_on_rails/sidekiq/process_scaling.rb
roo_on_rails-2.1.0 lib/roo_on_rails/sidekiq/process_scaling.rb
roo_on_rails-2.0.0.pre.pre.2 lib/roo_on_rails/sidekiq/process_scaling.rb
roo_on_rails-2.0.0.pre.pre.1 lib/roo_on_rails/sidekiq/process_scaling.rb
roo_on_rails-1.22.0 lib/roo_on_rails/sidekiq/process_scaling.rb
roo_on_rails-1.21.0 lib/roo_on_rails/sidekiq/process_scaling.rb
roo_on_rails-1.20.0 lib/roo_on_rails/sidekiq/process_scaling.rb
roo_on_rails-1.19.0 lib/roo_on_rails/sidekiq/process_scaling.rb
roo_on_rails-1.18.0 lib/roo_on_rails/sidekiq/process_scaling.rb
roo_on_rails-1.17.0 lib/roo_on_rails/sidekiq/process_scaling.rb
roo_on_rails-1.16.2 lib/roo_on_rails/sidekiq/process_scaling.rb
roo_on_rails-1.16.1 lib/roo_on_rails/sidekiq/process_scaling.rb
roo_on_rails-1.16.0 lib/roo_on_rails/sidekiq/process_scaling.rb
roo_on_rails-1.15.0 lib/roo_on_rails/sidekiq/process_scaling.rb
roo_on_rails-1.14.0 lib/roo_on_rails/sidekiq/process_scaling.rb
roo_on_rails-1.13.1 lib/roo_on_rails/sidekiq/process_scaling.rb
roo_on_rails-1.13.0 lib/roo_on_rails/sidekiq/process_scaling.rb