Module: AwsReporting::Alarm

Defined in:
lib/aws-reporting/alarm.rb

Class Method Summary collapse

Class Method Details

.alarmed?(history) ⇒ Boolean

Returns:

  • (Boolean)


16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/aws-reporting/alarm.rb', line 16

def alarmed?(history)
  return false unless history.history_item_type == 'StateUpdate'

  data = JSON.parse(history.history_data)
  if data["oldState"]["stateValue"] == 'INSUFFICIENT_DATA' and data["newState"]["stateValue"] == 'OK'
    false
  elsif data["oldState"]["stateValue"] == 'OK' and data["newState"]["stateValue"] == 'INSUFFICIENT_DATA'
    false
  else
    true
  end
end

.get_alarm_info(region, alarm) ⇒ Object



7
8
9
10
11
12
13
14
# File 'lib/aws-reporting/alarm.rb', line 7

def get_alarm_info(region, alarm)
  info = {:name => alarm.name,
          :region => region,
          :namespace => alarm.namespace,
          :dimensions => alarm.dimensions,
          :metric_name => alarm.metric_name,
          :status => get_status(alarm)}
end

.get_alarmsObject



35
36
37
38
39
40
41
42
43
44
45
# File 'lib/aws-reporting/alarm.rb', line 35

def get_alarms()
  alarms = []
  AWS.regions.each{|r|
    Config.update_region(r.name)
    cw = AWS::CloudWatch.new
    cw.alarms.each do |alarm|
      alarms << get_alarm_info(r.name, alarm)
    end
  }
  alarms.sort_by{|alarm| [alarm[:namespace], serialize(alarm[:dimensions]), alarm[:metric_name], alarm[:name]].join(' ')}
end

.get_status(alarm) ⇒ Object



29
30
31
32
33
# File 'lib/aws-reporting/alarm.rb', line 29

def get_status(alarm)
  return :ALARM if alarm.state_value == 'ALARM'
  return :ALARM if alarm.history_items.to_a.select{|history| alarmed?(history)}.length > 0
  return :OK
end

.serialize(dimensions) ⇒ Object



3
4
5
# File 'lib/aws-reporting/alarm.rb', line 3

def serialize(dimensions)
  dimensions.sort_by{|dimension| dimension[:name]}.map{|dimension| dimension[:name] + "=>" + dimension[:value]}.join(',')
end