]> git.treefish.org Git - logalert.git/commitdiff
re-send alerts; fix early un-alert
authorAlexander Schmidt <alex@treefish.org>
Tue, 6 Oct 2020 08:05:10 +0000 (10:05 +0200)
committerAlexander Schmidt <alex@treefish.org>
Tue, 6 Oct 2020 08:05:10 +0000 (10:05 +0200)
src/logalert.py

index d240f44a38fb7e61ee648f8ebee248700d5c7b65..509b24655197c6c75db861612de69341cfc91fd4 100755 (executable)
@@ -10,6 +10,7 @@ import time
 from line import Line
 
 MAX_LINES = 10
+ALERT_INTERVAL = 86400
 
 def follow(filename):
     while True:
@@ -70,39 +71,44 @@ args = parser.parse_args()
 
 kept_times = []
 lines = []
-last_time = None
+last_slot_time = None
 error_state = False
+last_alert_time = 0
 
 for line in follow(args.logfile):
-    now = int(time.time()) // args.interval_size
+    time_now = time.time()
+    slot_now = int(time_now) // args.interval_size
 
     if line != None:
-        if not last_time or now > last_time:
-            kept_times.append(now)
-            last_time = now
+        if not last_slot_time or slot_now > last_slot_time:
+            kept_times.append(slot_now)
+            last_slot_time = slot_now
         lines.append(line)
         if len(lines) > MAX_LINES:
             lines.pop(0)
 
     while len(kept_times) > 0 and \
-          kept_times[0] <= now - args.num_intervals:
+          kept_times[0] <= slot_now - (args.num_intervals + 1):
         kept_times.pop(0)
 
-    intervals = [False] * args.num_intervals
+    intervals = [False] * (args.num_intervals + 1)
     for kept_time in kept_times:
-        intervals[now - kept_time] = True
+        intervals[slot_now - kept_time] = True
 
     logging.debug(intervals)
 
-    if not False in intervals:
-        if not error_state:
-            logging.warning("Entering error state!")
-            error_state = True
+    if not False in intervals[1:]:
+        if not error_state or time_now - last_alert_time > ALERT_INTERVAL:
+            last_alert_time = time_now
             feed_handler( create_msg("Log Alert",
                                      "&#9760;",
                                      args.logfile,
                                      "Number of errors exceeded!",
                                      lines) )
+        if not error_state:
+            logging.warning("Entering error state!")
+            error_state = True
+
     else:
         if error_state:
             logging.info("Leaving error state.")