class OpenTelemetry::Exporters::Datadog::DatadogProbabilitySampler

Implements sampling based on a probability but records all spans regardless.

Constants

DEFAULT

Attributes

description[R]

Public Class Methods

default_with_probability(probability = 1.0) click to toggle source

Returns a new sampler. The probability of sampling a trace is equal to that of the specified probability.

@param [Numeric] probability The desired probability of sampling.

Must be within [0.0, 1.0].
# File lib/opentelemetry/exporters/datadog/datadog_probability_sampler.rb, line 47
def self.default_with_probability(probability = 1.0)
  raise ArgumentError, 'probability must be in range [0.0, 1.0]' unless (0.0..1.0).include?(probability)

  new(probability)
end
new(probability) click to toggle source
# File lib/opentelemetry/exporters/datadog/datadog_probability_sampler.rb, line 19
def initialize(probability)
  @probability = probability
  @id_upper_bound = (probability * (2**64 - 1)).ceil
  @description = format('TraceIdRatioBased{%.6f}', probability)
end

Public Instance Methods

sample?(trace_id) click to toggle source
# File lib/opentelemetry/exporters/datadog/datadog_probability_sampler.rb, line 25
def sample?(trace_id)
  @probability == 1.0 || trace_id[8, 8].unpack1('Q>') < @id_upper_bound
end
should_sample?(trace_id:, parent_context:, links:, name:, kind:, attributes:) click to toggle source

@api private

See {Samplers}.

# File lib/opentelemetry/exporters/datadog/datadog_probability_sampler.rb, line 32
def should_sample?(trace_id:, parent_context:, links:, name:, kind:, attributes:)
  # Ignored for sampling decision: links, name, kind, attributes.
  tracestate = OpenTelemetry::Trace.current_span(parent_context).context.tracestate
  if sample?(trace_id)
    OpenTelemetry::SDK::Trace::Samplers::Result.new(decision: OpenTelemetry::SDK::Trace::Samplers::Decision::RECORD_AND_SAMPLE, tracestate: tracestate)
  else
    OpenTelemetry::SDK::Trace::Samplers::Result.new(decision: OpenTelemetry::SDK::Trace::Samplers::Decision::RECORD_ONLY, tracestate: tracestate)
  end
end