class OpenCensus::Trace::Samplers::Probability

The Probability sampler uses a random number generator against a configured rate to determine whether or not to sample.

Constants

DEFAULT_RATE

The default sampling probability, equal to 1/10000.

Public Class Methods

new(rate, rng: nil) click to toggle source

Create a sampler for the given probability.

@param [Number] rate Probability that we will sample. This value must

be between 0 and 1

@param [#rand] rng The random number generator to use. Default is a

new Random instance.
# File lib/opencensus/trace/samplers/probability.rb, line 39
def initialize rate, rng: nil
  if rate > 1 || rate < 0
    raise ArgumentError, "Invalid rate - must be between 0 and 1."
  end
  @rate = rate
  @rng = rng || Random.new
  @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. The span context will
also be used to generate a deterministic value in place of the
pseudo-random number generator.

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

# File lib/opencensus/trace/samplers/probability.rb, line 60
def call opts = {}
  span_context = opts[:span_context]
  return true if span_context && span_context.sampled?
  value =
    if span_context
      (span_context.trace_id.to_i(16) % 0x10000000000000000).to_f /
        0x10000000000000000
    else
      @lock.synchronize do
        @rng.rand
      end
    end
  value <= @rate
end