class FlapjackConfigurator::UserConfiguration
User Configuration: Class representing the desired configuration as passed into the utility
Attributes
config[R]
entity_map[R]
Public Class Methods
new(config, diner, logger)
click to toggle source
# File lib/flapjack_configurator/user_configuration.rb, line 11 def initialize(config, diner, logger) @config = config @logger = logger @media_config = {} _sanity_check @entity_map = EntityMapper.new(self, diner) end
Public Instance Methods
_complete_config_merge(contact_id, config_key)
click to toggle source
# File lib/flapjack_configurator/user_configuration.rb, line 59 def _complete_config_merge(contact_id, config_key) contact_settings = contact_config(contact_id)[config_key] fail("Missing #{config_key} settings for contact #{contact_id}") if contact_settings.nil? baseline_opts = baseline_config.key?(config_key) ? baseline_config[config_key] : {} contact_defaults = contact_settings.key?('defaults') ? contact_settings['defaults'] : {} merged_config = {} (contact_settings.keys - %w(defaults)).each do |key| # Only merge baseline/defaults if the contact has the setting defined # This is to prevent errors from partial configs built from only partial defaults. if baseline_opts.key? key merged_config[key] = baseline_opts[key].merge(contact_defaults.merge(contact_settings[key])) else merged_config[key] = contact_defaults.merge(contact_settings[key]) end end @logger.debug("#{contact_id} #{config_key} complete config: #{merged_config}") return merged_config end
_sanity_check()
click to toggle source
# File lib/flapjack_configurator/user_configuration.rb, line 21 def _sanity_check # Check that required keys are present fail('Config missing contacts block') unless @config.key? 'contacts' @config['contacts'].each do |contact_id, contact_val| %w(details notification_media notification_rules).each do |contact_opt| fail("#{contact_id} contact config missing #{contact_opt} block") unless contact_val.key? contact_opt end end end
baseline_config()
click to toggle source
# File lib/flapjack_configurator/user_configuration.rb, line 51 def baseline_config if @config.key? 'baseline_options' return @config['baseline_options'] else return {} end end
contact_config(contact_id)
click to toggle source
# File lib/flapjack_configurator/user_configuration.rb, line 35 def contact_config(contact_id) return nil unless @config['contacts'].key? contact_id # Merge in defaults for keys which may be omitted return { 'entities' => { 'exact' => [], 'regex' => [] }, 'entities_blacklist' => { 'exact' => [], 'regex' => [] } }.deep_merge(@config['contacts'][contact_id]) end
contact_ids()
click to toggle source
# File lib/flapjack_configurator/user_configuration.rb, line 31 def contact_ids @config['contacts'].keys end
default_contacts()
click to toggle source
Return a list of contacts with the default bit set This is pretty entitymapper centric, but it makes more sense here due to current layout.
# File lib/flapjack_configurator/user_configuration.rb, line 47 def default_contacts @config['contacts'].select { |_, contact| contact.key? 'entities' }.select { |_, c| c['entities']['default'] }.keys end
media(contact_id)
click to toggle source
# File lib/flapjack_configurator/user_configuration.rb, line 81 def media(contact_id) if @media_config[contact_id].nil? @media_config[contact_id] = _complete_config_merge(contact_id, 'notification_media') end return @media_config[contact_id] end
notification_rules(contact_id)
click to toggle source
# File lib/flapjack_configurator/user_configuration.rb, line 88 def notification_rules(contact_id) notification_rules = _complete_config_merge(contact_id, 'notification_rules') # Double check that the defined rules call for media which exists notification_rules.each do |nr_id, nr_val| %w(warning_media critical_media unknown_media).each do |alert_type| next unless nr_val.key? alert_type nr_val[alert_type].each do |alert_media| unless media(contact_id).keys.include? alert_media @logger.warn("Notification rule #{nr_id} for contact #{contact_id} calls for media #{alert_media} in #{alert_type} which isn't defined for #{contact_id}") end end end end # The notification rules need to have unique IDs contianing the contact id return {}.tap { |rv| notification_rules.each { |nr_id, nr_val| rv["#{contact_id}_#{nr_id}"] = nr_val } } end