class NewRelic::Agent::Configuration::EnvironmentSource

Constants

SPECIAL_CASE_KEYS
SUPPORTED_PREFIXES

Attributes

alias_map[RW]
type_map[RW]

Public Class Methods

new() click to toggle source
# File lib/new_relic/agent/configuration/environment_source.rb, line 18
def initialize
  set_log_file
  set_config_file

  @alias_map = {}
  @type_map = {}

  DEFAULTS.each do |config_setting, value|
    self.type_map[config_setting] = value[:type]
    set_aliases(config_setting, value)
  end

  set_values_from_new_relic_environment_variables
end

Public Instance Methods

collect_new_relic_environment_variable_keys() click to toggle source
# File lib/new_relic/agent/configuration/environment_source.rb, line 114
def collect_new_relic_environment_variable_keys
  ENV.keys.select { |key| key.match(SUPPORTED_PREFIXES) }
end
convert_environment_key_to_config_key(key) click to toggle source
# File lib/new_relic/agent/configuration/environment_source.rb, line 109
def convert_environment_key_to_config_key(key)
  stripped_key = key.gsub(SUPPORTED_PREFIXES, '').downcase.to_sym
  self.alias_map[stripped_key] || stripped_key
end
serverless?() click to toggle source

we can’t rely on the :‘serverless_mode.enabled’ config parameter being set yet to signify serverless mode given that we’re in the midst of building the config but we can always rely on the env var being set by the Lambda layer

# File lib/new_relic/agent/configuration/environment_source.rb, line 122
def serverless?
  NewRelic::Agent::ServerlessHandler.env_var_set?
end
set_aliases(config_setting, value) click to toggle source
# File lib/new_relic/agent/configuration/environment_source.rb, line 33
def set_aliases(config_setting, value)
  set_dotted_alias(config_setting)

  return unless value[:aliases]

  value[:aliases].each do |config_alias|
    self.alias_map[config_alias] = config_setting
  end
end
set_config_file() click to toggle source
# File lib/new_relic/agent/configuration/environment_source.rb, line 63
def set_config_file
  self[:config_path] = ENV['NRCONFIG'] if ENV['NRCONFIG']
end
set_dotted_alias(original_config_setting) click to toggle source
# File lib/new_relic/agent/configuration/environment_source.rb, line 43
def set_dotted_alias(original_config_setting)
  config_setting = original_config_setting.to_s

  if config_setting.include?('.')
    config_alias = config_setting.tr('.', '_').to_sym
    self.alias_map[config_alias] = original_config_setting
  end
end
set_key_by_type(config_key, environment_key) click to toggle source
# File lib/new_relic/agent/configuration/environment_source.rb, line 82
def set_key_by_type(config_key, environment_key)
  value = ENV[environment_key]
  type = self.type_map[config_key]

  if type == String
    self[config_key] = value
  elsif type == Integer
    self[config_key] = value.to_i
  elsif type == Float
    self[config_key] = value.to_f
  elsif type == Symbol
    self[config_key] = value.to_sym
  elsif type == Array
    self[config_key] = value.split(/\s*,\s*/)
  elsif type == NewRelic::Agent::Configuration::Boolean
    if /false|off|no/i.match?(value)
      self[config_key] = false
    elsif !value.nil?
      self[config_key] = true
    end
  elsif !serverless?
    ::NewRelic::Agent.logger.info("#{environment_key} does not have a corresponding configuration setting (#{config_key} does not exist).")
    ::NewRelic::Agent.logger.info('Run `rake newrelic:config:docs` or visit https://docs.newrelic.com/docs/apm/agents/ruby-agent/configuration/ruby-agent-configuration to see a list of available configuration settings.')
    self[config_key] = value
  end
end
set_log_file() click to toggle source
# File lib/new_relic/agent/configuration/environment_source.rb, line 52
def set_log_file
  if ENV['NEW_RELIC_LOG']
    if ENV['NEW_RELIC_LOG'].casecmp(NewRelic::STANDARD_OUT) == 0
      self[:log_file_path] = self[:log_file_name] = NewRelic::STANDARD_OUT
    else
      self[:log_file_path] = File.dirname(ENV['NEW_RELIC_LOG'])
      self[:log_file_name] = File.basename(ENV['NEW_RELIC_LOG'])
    end
  end
end
set_value_from_environment_variable(key) click to toggle source
# File lib/new_relic/agent/configuration/environment_source.rb, line 77
def set_value_from_environment_variable(key)
  config_key = convert_environment_key_to_config_key(key)
  set_key_by_type(config_key, key)
end
set_values_from_new_relic_environment_variables() click to toggle source
# File lib/new_relic/agent/configuration/environment_source.rb, line 67
def set_values_from_new_relic_environment_variables
  nr_env_var_keys = collect_new_relic_environment_variable_keys

  nr_env_var_keys.each do |key|
    next if SPECIAL_CASE_KEYS.any? { |pattern| pattern === key.upcase }

    set_value_from_environment_variable(key)
  end
end