Class: Datadog::Tracing::Sampling::RateSampler

Inherits:
Sampler
  • Object
show all
Defined in:
lib/datadog/tracing/sampling/rate_sampler.rb

Overview

RateSampler is based on a sample rate.

Constant Summary collapse

KNUTH_FACTOR =
1111111111111111111

Instance Method Summary collapse

Constructor Details

#initialize(sample_rate = 1.0, decision: nil) ⇒ RateSampler

Initialize a Datadog::Tracing::Sampling::RateSampler. This sampler keeps a random subset of the traces. Its main purpose is to reduce the instrumentation footprint.

Parameters:

  • sample_rate (Numeric) (defaults to: 1.0)

    the sample rate between 0.0 and 1.0, inclusive. 0.0 means that no trace will be sampled; 1.0 means that all traces will be sampled.



19
20
21
22
23
# File 'lib/datadog/tracing/sampling/rate_sampler.rb', line 19

def initialize(sample_rate = 1.0, decision: nil)
  super()
  @sampler = Core::KnuthSampler.new(sample_rate, knuth_factor: KNUTH_FACTOR)
  @decision = decision
end

Instance Method Details

#sample!(trace) ⇒ Object



37
38
39
40
41
42
43
44
# File 'lib/datadog/tracing/sampling/rate_sampler.rb', line 37

def sample!(trace)
  return false unless sample?(trace)

  trace.sample_rate = sample_rate
  trace.set_tag(Tracing::::Ext::Distributed::TAG_DECISION_MAKER, @decision) if @decision

  true
end

#sample?(trace) ⇒ Boolean

Returns:

  • (Boolean)


33
34
35
# File 'lib/datadog/tracing/sampling/rate_sampler.rb', line 33

def sample?(trace)
  @sampler.sample?(trace.id)
end

#sample_rate(*_) ⇒ Object



25
26
27
# File 'lib/datadog/tracing/sampling/rate_sampler.rb', line 25

def sample_rate(*_)
  @sampler.rate
end

#sample_rate=(sample_rate) ⇒ Object



29
30
31
# File 'lib/datadog/tracing/sampling/rate_sampler.rb', line 29

def sample_rate=(sample_rate)
  @sampler = Core::KnuthSampler.new(sample_rate, knuth_factor: KNUTH_FACTOR)
end