class Bigcommerce::Lightstep::Interceptors::Env
Hydrates span tags with specified ENV vars
Constants
- PRESET_HOSTNAME
- PRESET_NOMAD
Public Class Methods
new(keys: nil, env: nil, presets: [])
click to toggle source
@param [Hash] keys A hash of span->env key mappings @param [ENV] env The ENV class to get variables from @param [Array<Symbol>] presets Specify presets that automatically setup keys
Calls superclass method
Bigcommerce::Lightstep::Interceptors::Base::new
# File lib/bigcommerce/lightstep/interceptors/env.rb, line 45 def initialize(keys: nil, env: nil, presets: []) super() @keys = keys || {} @presets = presets || [] @env = env || ENV augment_keys_with_presets! collect_values! end
Public Instance Methods
call(span:) { |span| ... }
click to toggle source
@param [::LightStep::Span] span
# File lib/bigcommerce/lightstep/interceptors/env.rb, line 57 def call(span:) return yield span unless root_span?(span) value_mutex do @values.each do |span_key, value| span.set_tag(span_key, value) end end yield span end
Private Instance Methods
augment_keys_with_presets!()
click to toggle source
Augment keys based on presets
# File lib/bigcommerce/lightstep/interceptors/env.rb, line 93 def augment_keys_with_presets! @presets.each do |preset| case preset when :hostname @keys.merge!(PRESET_HOSTNAME) when :nomad @keys.merge!(PRESET_NOMAD) end end end
collect_values!()
click to toggle source
Pre-collect values at start
# File lib/bigcommerce/lightstep/interceptors/env.rb, line 78 def collect_values! value_mutex do @values = {} @keys.each do |span_key, env_key| value = @env.fetch(env_key.to_s, nil) value = value.nil? ? '' : value @values[span_key.to_s.downcase.tr('-', '_').strip] = value end @values end end
root_span?(span)
click to toggle source
# File lib/bigcommerce/lightstep/interceptors/env.rb, line 71 def root_span?(span) span.instance_variable_get(:@root_span) == true end
value_mutex(&block)
click to toggle source
Handle access to values in a thread-safe manner
# File lib/bigcommerce/lightstep/interceptors/env.rb, line 107 def value_mutex(&block) @value_mutex ||= begin require 'monitor' Monitor.new end @value_mutex.synchronize(&block) end