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