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