lib/contrast/config/diagnostics/tools.rb in contrast-agent-7.3.0 vs lib/contrast/config/diagnostics/tools.rb in contrast-agent-7.3.1
- old
+ new
@@ -9,27 +9,33 @@
module Config
module Diagnostics
# Diagnostics tools to be included in config components.
module Tools
CHECK = 'd'
+ CONTRAST_MARK = 'CONTRAST_'
class << self
# Creates new config instances for each read config entry from the flat generated configs.
#
# @param flats [Array] of flatten configs produced by #flatten_settings
# @param source [Boolean] flag to set the desired value class, it may be a effective or source value.
+ # @param cli [Boolean] flag to check if the value comes from cli.
# @return [Array<Contrast::Config::Diagnostics::SourceConfigValue>]
- def to_config_values flats, source: false
+ def to_config_values flats, source: false, cli: false
config_value_klass = if source
Contrast::Config::Diagnostics::SourceConfigValue
else
Contrast::Config::Diagnostics::EffectiveConfigValue
end
settings = []
flats.each do |entry|
entry.each do |key, value|
efc_value = config_value_klass.new.tap do |config_value|
- config_value.canonical_name = Contrast::Utils::ObjectShare::CONTRAST_DOT + key
+ config_value.canonical_name = Contrast::Utils::ObjectShare::CONTRAST_DOT + key unless cli
+ if cli && key.to_s.include?(CONTRAST_MARK)
+ config_value.canonical_name = key.gsub(Contrast::Utils::ObjectShare::DOUBLE_UNDERSCORE,
+ Contrast::Utils::ObjectShare::PERIOD).downcase
+ end
config_value.key = key
config_value.value = value_to_s(value)
end
settings << efc_value if efc_value
end
@@ -38,21 +44,25 @@
end
# Flattens out the read settings from file, env or contrast ui.
# example: {"agent.polling.server_settings_ms"=>"50000"}
#
+ # If cli is set we avoid adding the path and additional '.' to the key.
+ #
# @param data [Hash, nil]
# @param path [String] where to look for settings.
# @param config [Hash] symbolized config to fetch keys from.
- def flatten_settings data, path = [], config: Contrast::CONFIG.config.loaded_config
+ # @param cli [Boolean] does the config come from cli.
+ def flatten_settings data, path = [], config: Contrast::CONFIG.config.loaded_config, cli: false
return [] unless data
data.each_with_object([]) do |(k, v), entries|
if v.cs__is_a?(Hash)
entries.concat(flatten_settings(v, path.dup.append(k.to_sym)))
else
- entries << { "#{ path.join('.') }.#{ k }" => config.dig(*path, k).to_s }
+ entries << { k.to_s => config.dig(*path, k).to_s } if cli
+ entries << { "#{ path.join('.') }.#{ k }" => config.dig(*path, k).to_s } unless cli
end
end.flatten # rubocop:disable Style/MethodCalledOnDoEndBlock
end
# Recursively converts each value to string.
@@ -60,10 +70,10 @@
# @param value [Hash, nil]
def value_to_s value
return if value.nil?
return value if value.cs__is_a?(String)
- value.each_with_object({}) do |(k, v), m| # rubocop:disable Style/HashTransformValues
+ value&.each_with_object({}) do |(k, v), m| # rubocop:disable Style/HashTransformValues
m[k] = if v.cs__is_a?(Hash)
value_to_s(v)
elsif v.cs__is_a?(Array)
v.map(&:to_s)
else