Method: Datadog::Tracing::Sampling::RuleSampler#initialize

Defined in:
lib/datadog/tracing/sampling/rule_sampler.rb

#initialize(rules = [], rate_limit: Datadog.configuration.tracing.sampling.rate_limit, rate_limiter: nil, default_sample_rate: Datadog.configuration.tracing.sampling.default_rate, default_sampler: nil) ⇒ RuleSampler

Returns a new instance of RuleSampler.

Parameters:

  • rules (Array<Rule>) (defaults to: [])

    ordered list of rules to be applied to a trace

  • rate_limit (Float) (defaults to: Datadog.configuration.tracing.sampling.rate_limit)

    number of traces per second, defaults to 100

  • rate_limiter (RateLimiter) (defaults to: nil)

    limiter applied after rule matching

  • default_sample_rate (Float) (defaults to: Datadog.configuration.tracing.sampling.default_rate)

    fallback sample rate when no rules apply to a trace, between [0,1], defaults to 1

  • default_sampler (Sample) (defaults to: nil)

    fallback strategy when no rules apply to a trace

[View source]

25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/datadog/tracing/sampling/rule_sampler.rb', line 25

def initialize(
  rules = [],
  rate_limit: Datadog.configuration.tracing.sampling.rate_limit,
  rate_limiter: nil,
  default_sample_rate: Datadog.configuration.tracing.sampling.default_rate,
  default_sampler: nil
)
  @rules = if default_sample_rate && !default_sampler
             # Add to the end of the rule list a rule always matches any trace
             rules << SimpleRule.new(sample_rate: default_sample_rate)
           else
             rules
           end
  @rate_limiter = if rate_limiter
                    rate_limiter
                  elsif rate_limit
                    Core::TokenBucket.new(rate_limit)
                  else
                    Core::UnlimitedLimiter.new
                  end
  @default_sampler = if default_sampler
                       default_sampler
                     elsif default_sample_rate
                       nil
                     else
                       # TODO: Simplify .tags access, as `Tracer#tags` can't be arbitrarily changed anymore
                       RateByServiceSampler.new(1.0, env: -> { Tracing.send(:tracer).tags['env'] })
                     end
end