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