Class: Datadog::RateByServiceSampler

Inherits:
Sampler
  • Object
show all
Defined in:
lib/ddtrace/sampler.rb

Overview

RateByServiceSampler samples different services at different rates

Constant Summary collapse

DEFAULT_KEY =
'service:,env:'.freeze

Instance Method Summary collapse

Constructor Details

#initialize(rate = 1.0, opts = {}) ⇒ RateByServiceSampler

Returns a new instance of RateByServiceSampler.



58
59
60
61
62
63
# File 'lib/ddtrace/sampler.rb', line 58

def initialize(rate = 1.0, opts = {})
  @env = opts.fetch(:env, Datadog.tracer.tags[:env])
  @mutex = Mutex.new
  @fallback = RateSampler.new(rate)
  @sampler = { DEFAULT_KEY => @fallback }
end

Instance Method Details

#sample(span) ⇒ Object



65
66
67
68
69
70
71
# File 'lib/ddtrace/sampler.rb', line 65

def sample(span)
  key = key_for(span)

  @mutex.synchronize do
    @sampler.fetch(key, @fallback).sample(span)
  end
end

#update(rate_by_service) ⇒ Object



73
74
75
76
77
78
79
80
81
82
# File 'lib/ddtrace/sampler.rb', line 73

def update(rate_by_service)
  @mutex.synchronize do
    @sampler.delete_if { |key, _| key != DEFAULT_KEY && !rate_by_service.key?(key) }

    rate_by_service.each do |key, rate|
      @sampler[key] ||= RateSampler.new(rate)
      @sampler[key].sample_rate = rate
    end
  end
end