Sha256: 49213cf3fd7f6b5cb4bf8649414eb25db9ba6f956076d215f1c4aa30ad8c9d7c

Contents?: true

Size: 1.3 KB

Versions: 25

Compression:

Stored size: 1.3 KB

Contents

# frozen_string_literal: true

# Copyright The OpenTelemetry Authors
#
# SPDX-License-Identifier: Apache-2.0

module OpenTelemetry
  module SDK
    module Trace
      module Samplers
        # @api private
        #
        # Implements sampling based on a probability.
        class TraceIdRatioBased
          attr_reader :description

          def initialize(probability)
            @probability = probability
            @id_upper_bound = (probability * (2**64 - 1)).ceil
            @description = format('TraceIdRatioBased{%.6f}', probability)
          end

          def ==(other)
            @description == other.description
          end

          # @api private
          #
          # See {Samplers}.
          def should_sample?(trace_id:, parent_context:, links:, name:, kind:, attributes:)
            tracestate = OpenTelemetry::Trace.current_span(parent_context).context.tracestate
            if sample?(trace_id)
              Result.new(decision: Decision::RECORD_AND_SAMPLE, tracestate: tracestate)
            else
              Result.new(decision: Decision::DROP, tracestate: tracestate)
            end
          end

          private

          def sample?(trace_id)
            @probability == 1.0 || trace_id[8, 8].unpack1('Q>') < @id_upper_bound
          end
        end
      end
    end
  end
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
opentelemetry-sdk-1.6.0 lib/opentelemetry/sdk/trace/samplers/trace_id_ratio_based.rb
opentelemetry-sdk-1.5.0 lib/opentelemetry/sdk/trace/samplers/trace_id_ratio_based.rb
opentelemetry-sdk-1.4.1 lib/opentelemetry/sdk/trace/samplers/trace_id_ratio_based.rb
opentelemetry-sdk-1.4.0 lib/opentelemetry/sdk/trace/samplers/trace_id_ratio_based.rb
opentelemetry-sdk-1.3.2 lib/opentelemetry/sdk/trace/samplers/trace_id_ratio_based.rb
opentelemetry-sdk-1.3.1 lib/opentelemetry/sdk/trace/samplers/trace_id_ratio_based.rb
opentelemetry-sdk-1.3.0 lib/opentelemetry/sdk/trace/samplers/trace_id_ratio_based.rb
opentelemetry-sdk-1.2.1 lib/opentelemetry/sdk/trace/samplers/trace_id_ratio_based.rb
opentelemetry-sdk-1.2.0 lib/opentelemetry/sdk/trace/samplers/trace_id_ratio_based.rb
opentelemetry-sdk-1.1.0 lib/opentelemetry/sdk/trace/samplers/trace_id_ratio_based.rb
opentelemetry-sdk-1.0.3 lib/opentelemetry/sdk/trace/samplers/trace_id_ratio_based.rb
opentelemetry-sdk-1.0.2 lib/opentelemetry/sdk/trace/samplers/trace_id_ratio_based.rb
opentelemetry-sdk-1.0.1 lib/opentelemetry/sdk/trace/samplers/trace_id_ratio_based.rb
opentelemetry-sdk-1.0.0 lib/opentelemetry/sdk/trace/samplers/trace_id_ratio_based.rb
opentelemetry-sdk-1.0.0.rc3 lib/opentelemetry/sdk/trace/samplers/trace_id_ratio_based.rb
opentelemetry-sdk-1.0.0.rc2 lib/opentelemetry/sdk/trace/samplers/trace_id_ratio_based.rb
opentelemetry-sdk-1.0.0.rc1 lib/opentelemetry/sdk/trace/samplers/trace_id_ratio_based.rb
opentelemetry-sdk-0.17.0 lib/opentelemetry/sdk/trace/samplers/trace_id_ratio_based.rb
opentelemetry-sdk-0.16.0 lib/opentelemetry/sdk/trace/samplers/trace_id_ratio_based.rb
opentelemetry-sdk-0.15.0 lib/opentelemetry/sdk/trace/samplers/trace_id_ratio_based.rb