From de83746b5a33f1d2ac573f67c94760cb0a67b57e Mon Sep 17 00:00:00 2001
From: Patrick J Cherry <patrick@bytemark.co.uk>
Date: Sat, 18 Jun 2011 18:14:38 +0100
Subject:  * Don't send acknowledged notifications unless the alert is raised 
 * Unacknowledge a cleared alert or a newly raised one  * Fixed interface
 unexpected nil errors.

---
 lib/mauve/alert.rb         | 21 ++++++++++++++-------
 lib/mauve/web_interface.rb |  4 ++--
 2 files changed, 16 insertions(+), 9 deletions(-)

(limited to 'lib/mauve')

diff --git a/lib/mauve/alert.rb b/lib/mauve/alert.rb
index cf88114..6dc3216 100644
--- a/lib/mauve/alert.rb
+++ b/lib/mauve/alert.rb
@@ -131,7 +131,7 @@ module Mauve
     end
   
     def sort_tuple
-      [AlertGroup::LEVELS.index(self.level), (self.raised_at.to_time || self.cleared_at.to_time || Time.now)]
+      [AlertGroup::LEVELS.index(self.level), (self.raised_at || self.cleared_at || Time.now).to_time]
     end
 
     def <=>(other)
@@ -167,7 +167,7 @@ module Mauve
       self.update_type = :acknowledged
 
       logger.error("Couldn't save #{self}") unless save
-      AlertGroup.notify([self])
+      AlertGroup.notify([self]) if self.raised?
     end
     
     def unacknowledge!
@@ -177,7 +177,7 @@ module Mauve
       self.update_type = (raised? ? :raised : :cleared)
 
       logger.error("Couldn't save #{self}") unless save
-      AlertGroup.notify([self])
+      AlertGroup.notify([self]) if self.raised?
     end
     
     def raise!
@@ -400,15 +400,22 @@ module Mauve
             alert_db.cleared_at = nil 
           end
          
-          #
-          # 
-          #
           if alert_db.cleared?
             alert_db.update_type = :cleared
           else
             alert_db.update_type = :raised
           end
-            
+          
+          #
+          # If the alert is cleared ,or has just been raised unset the acknowledge dates. 
+          #
+          if alert_db.acknowledged? and (alert_db.cleared? or (alert_db.raised? and !was_raised))
+            alert_db.acknowledged_at = nil 
+          end
+
+          #
+          # Set the subject
+          #
           if alert.subject and !alert.subject.empty?
             alert_db.subject = Alert.remove_html(alert.subject)
           else
diff --git a/lib/mauve/web_interface.rb b/lib/mauve/web_interface.rb
index de12291..29e41f7 100644
--- a/lib/mauve/web_interface.rb
+++ b/lib/mauve/web_interface.rb
@@ -186,10 +186,10 @@ EOF
       type_hours = params[:type_hours] || "daylight"
       alerts     = params[:alerts]     || []
 
-      n_hours = (n_hours > 188 ? 188 : n_hours)
+      n_hours = (n_hours.to_i > 188 ? 188 : n_hours.to_i)
 
       if ack_until.to_s.empty?
-        ack_until = Time.now.in_x_hours(n_hours.to_i, type_hours.to_s)
+        ack_until = Time.now.in_x_hours(n_hours, type_hours.to_s)
       else
         ack_until = Time.at(ack_until.to_i)
       end
-- 
cgit v1.2.3