class CfnGuardian::DisplayFormatter
Public Class Methods
new(alarms=[])
click to toggle source
# File lib/cfnguardian/display_formatter.rb, line 8 def initialize(alarms=[]) @alarms = alarms end
Public Instance Methods
alarm_history(history,type)
click to toggle source
# File lib/cfnguardian/display_formatter.rb, line 114 def alarm_history(history,type) rows = [] line_width = 100 history.each do |item| data = JSON.load(item.history_data) case type when "StateUpdate" rows << [ item.timestamp.localtime, item.history_summary, data['newState']['stateReason'].word_wrap ] when "ConfigurationUpdate" updated = [] if data['type'] == 'Update' data['originalUpdatedFields'].each do |k,v| unless k == 'alarmConfigurationUpdatedTimestamp' updated << "#{k}: #{v} -> #{data['updatedAlarm'][k]}" end end end rows << [ item.timestamp.localtime, data['type'], updated.join("\n").word_wrap ] end end return rows end
alarm_state(metric_alarms)
click to toggle source
# File lib/cfnguardian/display_formatter.rb, line 91 def alarm_state(metric_alarms) rows = [] metric_alarms.each do |ma| if ma.state_value == 'ALARM' state_value = ma.state_value.to_s.red elsif ma.state_value == 'INSUFFICIENT_DATA' state_value = ma.state_value.to_s.yellow else state_value = ma.state_value.to_s.green end rows << [ ma.alarm_name, state_value, ma.state_updated_timestamp.localtime, ma.actions_enabled ? 'ENABLED'.green : 'DISABLED'.red ] end # sort by state_value return rows.sort_by {|r| r[3]} end
alarms()
click to toggle source
# File lib/cfnguardian/display_formatter.rb, line 12 def alarms() resp = [] @alarms.each do |alarm| alarm_name = CfnGuardian::CloudWatch.get_alarm_name(alarm) rows = [ ['ResourceId', alarm.resource_id], ['ResourceHash', alarm.resource_hash], ['ResourceName', alarm.resource_name], ['Enabled', alarm.enabled], ['MetricName', alarm.metric_name], ['Dimensions', alarm.dimensions], ['Threshold', alarm.threshold], ['Period', alarm.period], ['EvaluationPeriods', alarm.evaluation_periods], ['ComparisonOperator', alarm.comparison_operator], ['Statistic', alarm.statistic], ['ActionsEnabled', alarm.actions_enabled], ['DatapointsToAlarm', alarm.datapoints_to_alarm], ['ExtendedStatistic', alarm.extended_statistic], ['EvaluateLowSampleCountPercentile', alarm.evaluate_low_sample_count_percentile], ['Unit', alarm.unit], ['AlarmAction', alarm.alarm_action], ['TreatMissingData', alarm.treat_missing_data] ] rows.select! {|row| !row[1].nil?} resp << { title: "#{alarm.group}::#{alarm.name}".green + "\n" + alarm_name.green, rows: rows } end return resp end
compare_alarms(metric_alarms)
click to toggle source
# File lib/cfnguardian/display_formatter.rb, line 49 def compare_alarms(metric_alarms) resp = [] @alarms.each do |alarm| alarm_name = CfnGuardian::CloudWatch.get_alarm_name(alarm) metric_alarm = metric_alarms.find {|ma| ma.alarm_name.include? alarm_name} dimensions = metric_alarm.dimensions.map {|dim| {dim.name.to_sym => dim.value}}.inject(:merge) rows = [ ['ResourceId', alarm.resource_id, alarm.resource_id], ['ResourceHash', alarm.resource_hash, alarm.resource_hash], ['ResourceName', alarm.resource_name, alarm.resource_name], ['Enabled', alarm.enabled, true], ['MetricName', alarm.metric_name, metric_alarm.metric_name], ['Dimensions', alarm.dimensions, dimensions], ['Threshold', alarm.threshold.to_f, metric_alarm.threshold], ['Period', alarm.period, metric_alarm.period], ['EvaluationPeriods', alarm.evaluation_periods, metric_alarm.evaluation_periods], ['ComparisonOperator', alarm.comparison_operator, metric_alarm.comparison_operator], ['Statistic', alarm.statistic, metric_alarm.statistic], ['ActionsEnabled', alarm.actions_enabled, metric_alarm.actions_enabled], ['DatapointsToAlarm', alarm.datapoints_to_alarm, metric_alarm.datapoints_to_alarm], ['ExtendedStatistic', alarm.extended_statistic, metric_alarm.extended_statistic], ['EvaluateLowSampleCountPercentile', alarm.evaluate_low_sample_count_percentile, metric_alarm.evaluate_low_sample_count_percentile], ['Unit', alarm.unit, metric_alarm.unit], ['TreatMissingData', alarm.treat_missing_data, metric_alarm.treat_missing_data], ['AlarmAction', alarm.alarm_action, alarm.alarm_action] ] rows.select! {|row| !row[1].nil?}.each {|row| colour_compare_row(row)} if has_config_difference?(rows) resp << { title: "#{alarm.group}::#{alarm.name}".green + "\n" + alarm_name.green, rows: rows } end end return resp end
Private Instance Methods
colour_compare_row(row)
click to toggle source
# File lib/cfnguardian/display_formatter.rb, line 159 def colour_compare_row(row) return row[1].eql?(row[2]) ? row.map! {|r| r.to_s.green} : row.map! {|r| r.to_s.red} end
has_config_difference?(rows)
click to toggle source
# File lib/cfnguardian/display_formatter.rb, line 150 def has_config_difference?(rows) rows.each do |row| unless row[1].eql?(row[2]) return true end end return false end