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