lib/new_relic/agent/configuration/manager.rb in newrelic_rpm-9.8.0 vs lib/new_relic/agent/configuration/manager.rb in newrelic_rpm-9.9.0
- old
+ new
@@ -136,30 +136,47 @@
value
end
end
def evaluate_and_apply_transformations(key, value)
- apply_transformations(key, evaluate_procs(value))
+ evaluated = evaluate_procs(value)
+ default = enforce_allowlist(key, evaluated)
+ return default if default
+
+ apply_transformations(key, evaluated)
end
def apply_transformations(key, value)
if transform = transform_from_default(key)
begin
transform.call(value)
rescue => e
- ::NewRelic::Agent.logger.error("Error applying transformation for #{key}, pre-transform value was: #{value}.", e)
+ NewRelic::Agent.logger.error("Error applying transformation for #{key}, pre-transform value was: #{value}.", e)
raise e
end
else
value
end
end
+ def enforce_allowlist(key, value)
+ return unless allowlist = default_source.allowlist_for(key)
+ return if allowlist.include?(value)
+
+ default = default_source.default_for(key)
+ NewRelic::Agent.logger.warn "Invalid value '#{value}' for #{key}, applying default value of '#{default}'"
+ default
+ end
+
def transform_from_default(key)
- ::NewRelic::Agent::Configuration::DefaultSource.transform_for(key)
+ default_source.transform_for(key)
end
+ def default_source
+ NewRelic::Agent::Configuration::DefaultSource
+ end
+
def register_callback(key, &proc)
@callbacks[key] << proc
yield(@cache[key])
end
@@ -212,11 +229,11 @@
thawed_layer = layer.to_hash.dup
thawed_layer.each do |k, v|
begin
thawed_layer[k] = instance_eval(&v) if v.respond_to?(:call)
rescue => e
- ::NewRelic::Agent.logger.debug("#{e.class.name} : #{e.message} - when accessing config key #{k}")
+ NewRelic::Agent.logger.debug("#{e.class.name} : #{e.message} - when accessing config key #{k}")
thawed_layer[k] = nil
end
thawed_layer.delete(:config)
end
flat.merge(thawed_layer.to_hash)
@@ -381,10 +398,10 @@
def log_config(direction, source)
# Just generating this log message (specifically calling `flattened`)
# is expensive enough that we don't want to do it unless we're
# actually going to be logging the message based on our current log
# level, so use a `do` block.
- ::NewRelic::Agent.logger.debug do
+ NewRelic::Agent.logger.debug do
hash = flattened.delete_if { |k, _h| DEFAULTS.fetch(k, {}).fetch(:exclude_from_reported_settings, false) }
"Updating config (#{direction}) from #{source.class}. Results: #{hash.inspect}"
end
end