Sha256: f282f46982e82fcdf410e3ff8905b859e5432f31a8026a5e2281de667057410b

Contents?: true

Size: 863 Bytes

Versions: 2

Compression:

Stored size: 863 Bytes

Contents

# frozen_string_literal: true

module Jaeger
  module Samplers
    # Probabilistic sampler
    #
    # Sample a portion of traces using trace_id as the random decision
    class Probabilistic
      attr_reader :rate

      def initialize(rate: 0.001)
        update(rate: rate)
      end

      def update(rate:)
        if rate < 0.0 || rate > 1.0
          raise "Sampling rate must be between 0.0 and 1.0, got #{rate.inspect}"
        end

        new_boundary = TraceId::TRACE_ID_UPPER_BOUND * rate
        return false if @boundary == new_boundary

        @rate = rate
        @boundary = TraceId::TRACE_ID_UPPER_BOUND * rate
        @tags = {
          'sampler.type' => 'probabilistic',
          'sampler.param' => rate
        }

        true
      end

      def sample(trace_id:, **)
        [@boundary >= trace_id, @tags]
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
jaeger-client-1.1.0 lib/jaeger/samplers/probabilistic.rb
jaeger-client-1.0.0 lib/jaeger/samplers/probabilistic.rb