class RooOnRails::Sidekiq::ProcessScaling

Constants

WORKER_DECREASE_THRESHOLD
WORKER_INCREASE_THRESHOLD

Public Class Methods

new(queue_latencies) click to toggle source
# File lib/roo_on_rails/sidekiq/process_scaling.rb, line 11
def initialize(queue_latencies)
  @queue_latencies = queue_latencies
  @queue_names = @queue_latencies.map(&:name)
end

Public Instance Methods

current_processes() click to toggle source
# File lib/roo_on_rails/sidekiq/process_scaling.rb, line 16
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
max_normalised_latency() click to toggle source
# File lib/roo_on_rails/sidekiq/process_scaling.rb, line 25
def max_normalised_latency
    @queue_latencies.any? ? @queue_latencies.map(&:normalised_latency).max.to_f : 0.0
end
requested_processes() click to toggle source
# File lib/roo_on_rails/sidekiq/process_scaling.rb, line 29
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