X-Git-Url: http://git.treefish.org/~alex/logalert.git/blobdiff_plain/9bd4e7752ed07286a8e6b43f92c2820192539a5c..066228e2a7b4a1ae397231965d17c25bef2cd461:/src/misc.py diff --git a/src/misc.py b/src/misc.py new file mode 100644 index 0000000..8d8253d --- /dev/null +++ b/src/misc.py @@ -0,0 +1,50 @@ +import logging +import os +import shlex +import subprocess +import time + +def follow_file(path): + while True: + try: + fd = os.open(path, os.O_RDONLY) + current_ino = os.fstat(fd).st_ino + with os.fdopen(fd, "r") as f: + logging.info("Re-attached to file.") + for line in f: pass + while True: + line = f.readline() + if not line: + if os.stat(path).st_ino != current_ino or \ + os.stat(path).st_size < f.tell(): + break + else: + time.sleep(1.0) + yield None + else: + yield line.rstrip("\n") + except FileNotFoundError: + time.sleep(1.0) + yield None + +def feed_handler(cmd, data): + try: + handler = subprocess.Popen(shlex.split(cmd), + 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