class Jaeger::Samplers::RateLimiting

Samples at most max_traces_per_second. The distribution of sampled traces follows burstiness of the service, i.e. a service with uniformly distributed requests will have those requests sampled uniformly as well, but if requests are bursty, especially sub-second, then a number of sequential requests can be sampled each second.

Attributes

max_traces_per_second[R]
tags[R]

Public Class Methods

new(max_traces_per_second: 10) click to toggle source
# File lib/jaeger/samplers/rate_limiting.rb, line 13
def initialize(max_traces_per_second: 10)
  update(max_traces_per_second: max_traces_per_second)
end

Public Instance Methods

sample(*) click to toggle source
# File lib/jaeger/samplers/rate_limiting.rb, line 46
def sample(*)
  [@rate_limiter.check_credit(1.0), @tags]
end
update(max_traces_per_second:) click to toggle source
# File lib/jaeger/samplers/rate_limiting.rb, line 17
def update(max_traces_per_second:)
  if max_traces_per_second < 0.0
    raise "max_traces_per_second must not be negative, got #{max_traces_per_second}"
  end

  return false if max_traces_per_second == @max_traces_per_second

  @tags = {
    'sampler.type' => 'ratelimiting',
    'sampler.param' => max_traces_per_second
  }
  @max_traces_per_second = max_traces_per_second
  max_balance = [max_traces_per_second, 1.0].max

  if @rate_limiter
    @rate_limiter.update(
      credits_per_second: max_traces_per_second,
      max_balance: max_balance
    )
  else
    @rate_limiter = RateLimiter.new(
      credits_per_second: max_traces_per_second,
      max_balance: [max_traces_per_second, 1.0].max
    )
  end

  true
end