lib/flapjack/data/notification.rb in flapjack-0.7.27 vs lib/flapjack/data/notification.rb in flapjack-0.7.28
- old
+ new
@@ -92,13 +92,17 @@
end
self.new( parsed )
end
def ok?
- ['ok', 'up'].include?(@state)
+ @state && ['ok', 'up'].include?(@state.downcase)
end
+ def acknowledgement?
+ @state && ['acknowledgement'].include?(@state.downcase)
+ end
+
def contents
@contents ||= {'event_id' => @event_id,
'state' => @state,
'summary' => @summary,
'duration' => @duration,
@@ -188,12 +192,36 @@
media.select {|medium, address| rule_media.include?(medium) }
end
logger.debug "media_to_use: #{media_to_use}"
- media_to_use.each_pair.inject([]) { |ret, (k, v)|
+ # here begins rollup madness
+ media_to_use.each_pair.inject([]) { |ret, (media, address)|
+ rollup_type = nil
+
+ contact.add_alerting_check_for_media(media, @event_id) unless ok? || acknowledgement?
+
+ # expunge checks in (un)scheduled maintenance from the alerting set
+ cleaned = contact.clean_alerting_checks_for_media(media)
+ logger.debug("cleaned alerting checks for #{media}: #{cleaned}")
+
+ alerting_checks = contact.count_alerting_checks_for_media(media)
+ rollup_threshold = contact.rollup_threshold_for_media(media)
+ case
+ when rollup_threshold.nil?
+ # back away slowly
+ when alerting_checks >= rollup_threshold
+ next ret if contact.drop_rollup_notifications_for_media?(media)
+ contact.update_sent_rollup_alert_keys_for_media(media, :delete => ok?)
+ rollup_type = 'problem'
+ when (alerting_checks + cleaned >= rollup_threshold)
+ # alerting checks was just cleaned such that it is now below the rollup threshold
+ rollup_type = 'recovery'
+ end
+ logger.debug "rollup decisions: #{@event_id} #{@state} #{media} #{address} rollup_type: #{rollup_type}"
+
m = Flapjack::Data::Message.for_contact(contact,
- :medium => k, :address => v)
+ :medium => media, :address => address, :rollup => rollup_type)
ret << m
ret
}
}.compact.flatten
end