Class: NewRelic::Agent::Configuration::EnvironmentSource
- Inherits:
-
DottedHash
- Object
- Hash
- DottedHash
- NewRelic::Agent::Configuration::EnvironmentSource
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', 'NEW_RELIC_LOG', /^NEW_RELIC_METADATA_/ ]
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods inherited from DottedHash
#inspect, symbolize, #to_hash
Constructor Details
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_map ⇒ Object
16
17
18
|
# File 'lib/new_relic/agent/configuration/environment_source.rb', line 16
def alias_map
@alias_map
end
|
#type_map ⇒ Object
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_keys ⇒ Object
118
119
120
|
# File 'lib/new_relic/agent/configuration/environment_source.rb', line 118
def collect_new_relic_environment_variable_keys
ENV.keys.select { |key| key.match(SUPPORTED_PREFIXES) }
end
|
#convert_environment_key_to_config_key(key) ⇒ Object
113
114
115
116
|
# File 'lib/new_relic/agent/configuration/environment_source.rb', line 113
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? ⇒ Boolean
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
#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_file ⇒ Object
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
108
109
110
111
|
# 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] = if DEFAULTS[config_key].key?(:transform)
DEFAULTS[config_key][:transform].call(value)
else
value.split(/\s*,\s*/)
end
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 ⇒ Object
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_variables ⇒ Object
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
|