Module: Contrast::Config::Diagnostics::SingletonTools
- Included in:
- Tools
- Defined in:
- lib/contrast/config/diagnostics/singleton_tools.rb
Overview
Tools to help with the config diagnostics, called directly from the module.
Constant Summary collapse
- API_CREDENTIALS =
%w[api_key service_key].cs__freeze
- CONTRAST_MARK =
'CONTRAST_'
Instance Method Summary collapse
-
#flatten_settings(data, path = [], config: Contrast::CONFIG.config.loaded_config, cli: false) ⇒ Object
Flattens out the read settings from file, env or contrast ui.
-
#to_config_values(flats, source: false, cli: false) ⇒ Array<Contrast::Config::Diagnostics::SourceConfigValue>
Creates new config instances for each read config entry from the flat generated configs.
-
#update_config(parts, value, source_type) ⇒ Object
Update the stored config values to ensure that we know about the correct values, and that the sources are correct for entries updated from the UI.
-
#value_to_s(value) ⇒ Object
Recursively converts each value to string.
Instance Method Details
#flatten_settings(data, path = [], config: Contrast::CONFIG.config.loaded_config, cli: false) ⇒ Object
Flattens out the read settings from file, env or contrast ui. example: Contrast::Config::Diagnostics::SingletonTools.“agent“agent.polling“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.
@param cli [Boolean] does the config come from cli.
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/contrast/config/diagnostics/singleton_tools.rb', line 57 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 if API_CREDENTIALS.include?(k.to_s) entries << { k.to_s => Contrast::Configuration::EFFECTIVE_REDACTED } if cli entries << { "#{ path.join('.') }.#{ k }" => Contrast::Configuration::EFFECTIVE_REDACTED } unless cli next end entries << { k.to_s => value_to_s(config.dig(*path, k)) } if cli entries << { "#{ path.join('.') }.#{ k }" => value_to_s(config.dig(*path, k)) } unless cli end end.flatten # rubocop:disable Style/MethodCalledOnDoEndBlock end |
#to_config_values(flats, source: false, cli: false) ⇒ Array<Contrast::Config::Diagnostics::SourceConfigValue>
Creates new config instances for each read config entry from the flat generated configs.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/contrast/config/diagnostics/singleton_tools.rb', line 18 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 = key 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 = if API_CREDENTIALS.include?(key.to_s) Contrast::Configuration::EFFECTIVE_REDACTED else value_to_s(value) end end next unless efc_value settings << efc_value end end settings end |
#update_config(parts, value, source_type) ⇒ Object
Update the stored config values to ensure that we know about the correct values, and that the sources are correct for entries updated from the UI.
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/contrast/config/diagnostics/singleton_tools.rb', line 82 def update_config parts, value, source_type parts_array, string = handle_parts_array(parts) path = string ? parts : parts_array.join('.') return unless parts_array # Check to see whether the source has been overridden by local settings, # Before updating from Contrast UI. if source_type == Contrast::Components::Config::Sources::CONTRAST_UI && Contrast::CONFIG.sources.source_overridden?(path) return end level = Contrast::CONFIG.config.loaded_config parts_array[0...-1]&.each do |segment| level[segment] ||= {} level = level[segment] end return unless level.cs__is_a?(Hash) level[parts_array[-1]] = value Contrast::CONFIG.sources.set(path, source_type) end |
#value_to_s(value) ⇒ Object
Recursively converts each value to string.
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/contrast/config/diagnostics/singleton_tools.rb', line 109 def value_to_s value case value when String if Contrast::Utils::DuckUtils.empty_duck?(value) Contrast::Config::Diagnostics::SourceConfigValue::NULL else value end when Array handle_array_to_s(value) when Hash handle_hash_to_s(value) when TrueClass, FalseClass, Symbol, Integer value.to_s else Contrast::Config::Diagnostics::SourceConfigValue::NULL end end |