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

# 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