class Sqreen::Ecosystem::Tracing::SamplingConfiguration

tracing sampling configuration, as specified by the 2nd argument of the tracing_enable command. See github.com/sqreen/TechDoc/blob/master/content/specs/spec000025-enabling-tracing.md

Constants

DEFAULT_SCOPE

Public Class Methods

new(sampling_config) click to toggle source
# File lib/sqreen/ecosystem/tracing/sampling_configuration.rb, line 21
def initialize(sampling_config)
  @sampling_config = sampling_config
  @samplers = {}
  @samplers_virtual = build_virtual_holders(sampling_config)
end

Private Class Methods

build_sampler(scope, cfg) click to toggle source
# File lib/sqreen/ecosystem/tracing/sampling_configuration.rb, line 80
def build_sampler(scope, cfg)
  do_build_sampler(cfg['enabled'], cfg['sampling'] || [{}])
rescue StandardError => e
  logger.warn "Invalid sampling configuration for #{scope}: #{e.inspect}"
  logger.debug { e.backtrace }
  DisabledScopeSampler
end
do_build_sampler(enabled, sampling) click to toggle source
# File lib/sqreen/ecosystem/tracing/sampling_configuration.rb, line 90
def do_build_sampler(enabled, sampling)
  if enabled
    Sampler.new(sampling)
  else
    logger.debug { "Disabling scope #{scope}" }
    DisabledScopeSampler
  end
end

Public Instance Methods

forget_virtual_scope(scope, qualifier) click to toggle source
# File lib/sqreen/ecosystem/tracing/sampling_configuration.rb, line 37
def forget_virtual_scope(scope, qualifier)
  holder = @samplers_virtual[scope]
  return unless holder.delete!(qualifier)
end
should_sample?(scope, qualifier = nil) click to toggle source

@param [String] scope either the scope or the part behind @ in a virtual scope @param [String] qualifier the part after @ in a virtual scope or nil

# File lib/sqreen/ecosystem/tracing/sampling_configuration.rb, line 29
def should_sample?(scope, qualifier = nil)
  if qualifier
    fetch_sampler_virtual(scope, qualifier).should_sample?
  else
    fetch_sampler(scope).should_sample?
  end
end

Private Instance Methods

build_virtual_holders(sampling_config) click to toggle source
# File lib/sqreen/ecosystem/tracing/sampling_configuration.rb, line 66
def build_virtual_holders(sampling_config)
  Hash[
    sampling_config
    .select { |scope, _cfg| scope.end_with?('@*') }
    .map do |scope, cfg|
      parent = scope[0...-2] # remove trailing @*
      [parent, VirtualScopesHolder.new(parent, cfg)]
    end
  ]
end
fetch_sampler(scope) click to toggle source
# File lib/sqreen/ecosystem/tracing/sampling_configuration.rb, line 53
def fetch_sampler(scope)
  sampler = @samplers[scope]
  return sampler if sampler

  cfg = @sampling_config[scope] || @sampling_config[DEFAULT_SCOPE]
  if cfg
    @samplers[scope] = SamplingConfiguration.build_sampler(scope, cfg)
  else
    logger.info { "Disabling scope #{scope} due to its not being configured" }
    @samplers[scope] = DisabledScopeSampler
  end
end
fetch_sampler_virtual(scope, qualifier) click to toggle source
# File lib/sqreen/ecosystem/tracing/sampling_configuration.rb, line 44
def fetch_sampler_virtual(scope, qualifier)
  holder = @samplers_virtual[scope]

  # no virtual scope configured, fallback to plain scope
  return fetch_sampler(scope) unless holder

  holder[qualifier]
end