class SlowDown::Configuration

Constants

CONCURRENCY_MULTIPLIER
DEFAULTS

Public Class Methods

new(options) click to toggle source
# File lib/slow_down/configuration.rb, line 39
def initialize(options)
  @options = DEFAULTS.merge(options)
end

Public Instance Methods

concurrency() click to toggle source
# File lib/slow_down/configuration.rb, line 56
def concurrency
  @concurrency ||= @options[:concurrency] || [1, requests_per_second.ceil * CONCURRENCY_MULTIPLIER].max
end
invalidate() click to toggle source
# File lib/slow_down/configuration.rb, line 100
def invalidate
  @redis = nil
  @log_path = nil
  @log_level = nil
  @concurrency = nil
  @locks = nil
  @milliseconds_per_request = nil
  @milliseconds_per_request_per_lock = nil
  @seconds_per_retry = nil
  @seconds_per_retry_arr = nil
end
locks() click to toggle source
# File lib/slow_down/configuration.rb, line 60
def locks
  @locks ||= concurrency.times.map do |i|
    [redis_namespace, "#{lock_namespace}_#{i}"].compact.join(":")
  end
end
logger() click to toggle source
# File lib/slow_down/configuration.rb, line 43
def logger
  @logger ||= Logger.new(log_path).tap do |l|
    l.level = log_level
    l.formatter = proc do |severity, time, group_name, message|
      "#{time},#{severity},##{Process.pid},#{group_name}: #{message}\n"
    end
  end
end
milliseconds_per_request() click to toggle source
# File lib/slow_down/configuration.rb, line 66
def milliseconds_per_request
  @milliseconds_per_request ||= 1000.0 / requests_per_second
end
milliseconds_per_request_per_lock() click to toggle source
# File lib/slow_down/configuration.rb, line 70
def milliseconds_per_request_per_lock
  @milliseconds_per_request_per_lock ||= (milliseconds_per_request * concurrency).round
end
redis() click to toggle source
# File lib/slow_down/configuration.rb, line 52
def redis
  @redis ||= @options[:redis] || Redis.new(url: redis_url || ENV.fetch("REDIS_URL"))
end
seconds_per_retry(retry_count) click to toggle source
# File lib/slow_down/configuration.rb, line 74
def seconds_per_retry(retry_count)
  seconds_per_retry_arr[retry_count - 1]
end
seconds_per_retry_arr() click to toggle source
# File lib/slow_down/configuration.rb, line 78
def seconds_per_retry_arr
  @seconds_per_retry_arr ||= begin
    klass =
      case retry_strategy
      when :linear
        Strategy::Linear
      when :fibonacci
        Strategy::Fibonacci
      when :inverse_exponential
        Strategy::InverseExponential
      else
        retry_strategy
      end

    unless klass.is_a?(Class) && klass < Strategy::Base
      raise ConfigError, ":retry_strategy should be a class inheriting SlowDown::Strategy::Base"
    end

    klass.new(retries, timeout).normalized_series
  end
end