class Sqreen::Ecosystem::Tracing::VirtualScopesHolder

Constants

DISCARD_SIZE
MAX_VIRTUAL_SCOPES

Public Class Methods

new(parent, cfg) click to toggle source
# File lib/sqreen/ecosystem/tracing/sampling_configuration.rb, line 107
def initialize(parent, cfg)
  @parent = parent
  @cfg = cfg
  @virtual_scopes = {}
  @mutex = Mutex.new
end

Public Instance Methods

[](qualifier) click to toggle source
# File lib/sqreen/ecosystem/tracing/sampling_configuration.rb, line 114
def [](qualifier)
  return false unless @cfg['enabled']

  @mutex.synchronize do
    sampler = @virtual_scopes[qualifier]
    return sampler if sampler

    @virtual_scopes[qualifier] = create_virtual(qualifier)
  end
end
delete!(qualifier) click to toggle source
# File lib/sqreen/ecosystem/tracing/sampling_configuration.rb, line 125
def delete!(qualifier)
  @virtual_scopes.delete(qualifier)
end

Private Instance Methods

create_virtual(qualifier) click to toggle source
# File lib/sqreen/ecosystem/tracing/sampling_configuration.rb, line 131
def create_virtual(qualifier)
  discard if @virtual_scopes.size >= MAX_VIRTUAL_SCOPES

  @virtual_scopes[qualifier] =
    SamplingConfiguration.build_sampler("#{@parent}@#{qualifier}", @cfg)
end
discard() click to toggle source
# File lib/sqreen/ecosystem/tracing/sampling_configuration.rb, line 138
def discard
  logger.info { "Discarding excess virtual scopes for scope '#{@parent}'" }
  discard_keys = @virtual_scopes.keys.sample(DISCARD_SIZE)
  @virtual_scopes.delete_if { |k, _v| discard_keys.include? k }
end