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
UINT64_MODULO =
(1 << 64)

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.

[View source]

20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/datadog/tracing/sampling/rate_sampler.rb', line 20

def initialize(sample_rate = 1.0, decision: nil)
  super()

  unless sample_rate >= 0.0 && sample_rate <= 1.0
    Datadog.logger.warn('sample rate is not between 0 and 1, falling back to 1')
    sample_rate = 1.0
  end

  self.sample_rate = sample_rate

  @decision = decision
end

Instance Method Details

#sample!(trace) ⇒ Object

[View source]

46
47
48
49
50
51
52
53
54
55
# File 'lib/datadog/tracing/sampling/rate_sampler.rb', line 46

def sample!(trace)
  sampled = sample?(trace)

  return false unless sampled

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

  true
end

#sample?(trace) ⇒ Boolean

Returns:

  • (Boolean)
[View source]

42
43
44
# File 'lib/datadog/tracing/sampling/rate_sampler.rb', line 42

def sample?(trace)
  ((trace.id * KNUTH_FACTOR) % UINT64_MODULO) <= @sampling_id_threshold
end

#sample_rate(*_) ⇒ Object

[View source]

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

def sample_rate(*_)
  @sample_rate
end

#sample_rate=(sample_rate) ⇒ Object

[View source]

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

def sample_rate=(sample_rate)
  @sample_rate = sample_rate
  @sampling_id_threshold = sample_rate * Tracing::Utils::EXTERNAL_MAX_ID
end