class Datadog::RateByKeySampler

Samples at different rates by key.

Attributes

default_key[R]

Public Class Methods

new(default_key, default_rate = 1.0, &block) click to toggle source
# File lib/ddtrace/sampler.rb, line 83
def initialize(default_key, default_rate = 1.0, &block)
  raise ArgumentError, 'No resolver given!' unless block_given?

  @default_key = default_key
  @resolver = block
  @mutex = Mutex.new
  @samplers = {}

  set_rate(default_key, default_rate)
end

Public Instance Methods

default_sampler() click to toggle source
# File lib/ddtrace/sampler.rb, line 98
def default_sampler
  @samplers[default_key]
end
delete(key) click to toggle source
# File lib/ddtrace/sampler.rb, line 138
def delete(key)
  @mutex.synchronize do
    @samplers.delete(key)
  end
end
delete_if(&block) click to toggle source
# File lib/ddtrace/sampler.rb, line 144
def delete_if(&block)
  @mutex.synchronize do
    @samplers.delete_if(&block)
  end
end
length() click to toggle source
# File lib/ddtrace/sampler.rb, line 150
def length
  @samplers.length
end
resolve(span) click to toggle source
# File lib/ddtrace/sampler.rb, line 94
def resolve(span)
  @resolver.call(span)
end
sample!(span) click to toggle source
# File lib/ddtrace/sampler.rb, line 110
def sample!(span)
  key = resolve(span)

  @mutex.synchronize do
    @samplers.fetch(key, default_sampler).sample!(span)
  end
end
sample?(span) click to toggle source
# File lib/ddtrace/sampler.rb, line 102
def sample?(span)
  key = resolve(span)

  @mutex.synchronize do
    @samplers.fetch(key, default_sampler).sample?(span)
  end
end
sample_rate(span) click to toggle source
# File lib/ddtrace/sampler.rb, line 118
def sample_rate(span)
  key = resolve(span)

  @mutex.synchronize do
    @samplers.fetch(key, default_sampler).sample_rate
  end
end
update(key, rate) click to toggle source
# File lib/ddtrace/sampler.rb, line 126
def update(key, rate)
  @mutex.synchronize do
    set_rate(key, rate)
  end
end
update_all(rate_by_key) click to toggle source
# File lib/ddtrace/sampler.rb, line 132
def update_all(rate_by_key)
  @mutex.synchronize do
    rate_by_key.each { |key, rate| set_rate(key, rate) }
  end
end

Private Instance Methods

set_rate(key, rate) click to toggle source
# File lib/ddtrace/sampler.rb, line 156
def set_rate(key, rate)
  @samplers[key] ||= RateSampler.new(rate)
  @samplers[key].sample_rate = rate
end