class OpenCensus::Trace::Samplers::MaxQPS

The RateLimiting sampler delays a minimum amount of time between each sample, enforcing a maximum QPS across traces that use this sampler.

Constants

DEFAULT_RATE

Default rate in samples per second.

Public Class Methods

new(qps = DEFAULT_RATE, rng: nil, time_class: nil) click to toggle source

Create a sampler for the given QPS.

@param [Number] qps Samples per second. Default is {DEFAULT_RATE}. @param [#rand] rng The random number generator to use. Default is a

new `::Random` instance.

@param [#now] time_class The time class to use. Default is `::Time`.

Generally used for testing.
# File lib/opencensus/trace/samplers/rate_limiting.rb, line 40
def initialize qps = DEFAULT_RATE, rng: nil, time_class: nil
  @qps = qps
  @time_class = time_class || Time
  @rng = rng || Random.new
  @last_time = @time_class.now.to_f
  @lock = Monitor.new
end

Public Instance Methods

call(opts = {}) click to toggle source

Implements the sampler contract. Checks to see whether a sample should be taken at this time.

@param [Hash] opts The options to sample with. @option opts [SpanContext] :span_context If provided, the span context

will be checked and the parent's sampling decision will be
propagated if the parent was sampled.

@return [boolean] Whether to sample at this time.

# File lib/opencensus/trace/samplers/rate_limiting.rb, line 58
def call opts = {}
  span_context = opts[:span_context]
  return true if span_context && span_context.sampled?
  @lock.synchronize do
    time = @time_class.now.to_f
    elapsed = time - @last_time
    @last_time = time
    @rng.rand <= elapsed * @qps
  end
end