class PostHog::BackoffPolicy

def add_jitter(base, randomization_factor)

def add_jitter(base, randomization_factor)
  random_number = rand
  max_deviation = base * randomization_factor
  deviation = random_number * max_deviation
  random_number < 0.5 ? base - deviation : base + deviation
end

def initialize(opts = {})

Options Hash: (**opts)
  • :randomization_factor (Numeric) -- The randomization factor
  • :multiplier (Numeric) -- The value to multiply the current
  • :max_timeout_ms (Numeric) -- The maximum backoff timeout
  • :min_timeout_ms (Numeric) -- The minimum backoff timeout

Parameters:
  • opts (Hash) --
def initialize(opts = {})
  @min_timeout_ms = opts[:min_timeout_ms] || MIN_TIMEOUT_MS
  @max_timeout_ms = opts[:max_timeout_ms] || MAX_TIMEOUT_MS
  @multiplier = opts[:multiplier] || MULTIPLIER
  @randomization_factor =
    opts[:randomization_factor] || RANDOMIZATION_FACTOR
  @attempts = 0
end

def next_interval

Returns:
  • (Numeric) - the next backoff interval, in milliseconds.
def next_interval
  interval = @min_timeout_ms * (@multiplier**@attempts)
  interval = add_jitter(interval, @randomization_factor)
  @attempts += 1
  [interval, @max_timeout_ms].min
end