X-Git-Url: http://git.treefish.org/~alex/logalert.git/blobdiff_plain/6e4649c5bae35dc883f50642d81f0b57c6df565b..066228e2a7b4a1ae397231965d17c25bef2cd461:/src/logalert.py
diff --git a/src/logalert.py b/src/logalert.py
index 509b246..e2f02cc 100755
--- a/src/logalert.py
+++ b/src/logalert.py
@@ -2,58 +2,13 @@
import argparse
import logging
-import os
-import shlex
-import subprocess
import time
-from line import Line
+import misc
MAX_LINES = 10
ALERT_INTERVAL = 86400
-def follow(filename):
- while True:
- try:
- with open(filename, "r") as f:
- logging.info("Re-attached to log file.")
- for line in f: pass
- while True:
- line = f.readline()
- if not line:
- if not os.path.exists(filename):
- break
- else:
- time.sleep(1.0)
- yield None
- else:
- yield line.rstrip("\n")
- except FileNotFoundError:
- time.sleep(1.0)
- yield None
-
-def feed_handler(data):
- try:
- handler = subprocess.Popen(shlex.split(args.handler),
- stdin=subprocess.PIPE,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- encoding='UTF-8')
- out_data, err_data = handler.communicate("%s\n" % data)
- if handler.returncode != 0:
- logging.warning("Handler exited with non-zero return code %d! (%s)" %
- (handler.returncode, err_data))
- except Exception as e:
- logging.error("Error feeding handler: %s" % str(e))
-
-def create_msg(title, icon, logfile, text, lines):
- msg = "%s %s %s" % (title, logfile, icon)
- msg += "
%s" % text
- msg += "
" - for line in lines: msg += line + "\n" - msg += "" - return msg - logging.basicConfig(format='[%(asctime)s] %(levelname)s: %(message)s', level=logging.INFO, datefmt='%m/%d/%Y %H:%M:%S') @@ -75,7 +30,7 @@ last_slot_time = None error_state = False last_alert_time = 0 -for line in follow(args.logfile): +for line in misc.follow_file(args.logfile): time_now = time.time() slot_now = int(time_now) // args.interval_size @@ -100,11 +55,12 @@ for line in follow(args.logfile): 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", - "☠", - args.logfile, - "Number of errors exceeded!", - lines) ) + misc.feed_handler( args.handler, + misc.create_msg("Log Alert", + "☠", + args.logfile, + "Number of errors exceeded!", + lines) ) if not error_state: logging.warning("Entering error state!") error_state = True @@ -113,8 +69,3 @@ for line in follow(args.logfile): if error_state: logging.info("Leaving error state.") error_state = False - feed_handler( create_msg("Log Un-Alert", - "🌞", - args.logfile, - "Log is back to normal.", - lines) )