X-Git-Url: http://git.treefish.org/~alex/logalert.git/blobdiff_plain/9bd4e7752ed07286a8e6b43f92c2820192539a5c..066228e2a7b4a1ae397231965d17c25bef2cd461:/src/misc.py?ds=inline
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