Class: NewRelic::Agent::Configuration::EnvironmentSource

Inherits:
DottedHash
  • Object
show all
Defined in:
lib/new_relic/agent/configuration/environment_source.rb

Constant Summary collapse

SUPPORTED_PREFIXES =
/^new_relic_|^newrelic_/i
SPECIAL_CASE_KEYS =
[
  'NEW_RELIC_ENV', # read by NewRelic::Control::Frameworks::Ruby
  'NEW_RELIC_LOG', # read by set_log_file
  /^NEW_RELIC_METADATA_/ # read by NewRelic::Agent::Connect::RequestBuilder
]

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from DottedHash

#inspect, symbolize, #to_hash

Constructor Details

#initializeEnvironmentSource

Returns a new instance of EnvironmentSource.



18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 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

Instance Attribute Details

#alias_mapObject



16
17
18
# File 'lib/new_relic/agent/configuration/environment_source.rb', line 16

def alias_map
  @alias_map
end

#type_mapObject



16
17
18
# File 'lib/new_relic/agent/configuration/environment_source.rb', line 16

def type_map
  @type_map
end

Instance Method Details

#collect_new_relic_environment_variable_keysObject



114
115
116
# 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) ⇒ Object



109
110
111
112
# 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

#set_aliases(config_setting, value) ⇒ Object



33
34
35
36
37
38
39
40
41
# 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_fileObject



63
64
65
# 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) ⇒ Object



43
44
45
46
47
48
49
50
# 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) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# 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
  else
    ::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_fileObject



52
53
54
55
56
57
58
59
60
61
# 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) ⇒ Object



77
78
79
80
# 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_variablesObject



67
68
69
70
71
72
73
74
75
# 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