pvl/syslog/filter.py
changeset 44 977442ccb72d
child 45 10dfa434da77
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pvl/syslog/filter.py	Thu Jan 03 00:56:28 2013 +0200
@@ -0,0 +1,55 @@
+import logging; log = logging.getLogger('pvl.syslog.filter')
+
+class SyslogFilter (object) :
+    """
+        Filter syslog messages.
+    """
+
+    def __init__ (self, prog=None) :
+        """
+            prog        - match tag (process name)
+        """
+
+        self.prog = prog
+
+    def match_prog (self, prog) :
+        """
+            Match given prog?
+        """
+
+        # normalize
+        prog = prog.lower()
+
+        if prog.startswith('/') :
+            # base
+            prog = prog.split('/')[-1]
+
+        # match
+        if not prog :
+            # never matches non-tagged lines
+            return False
+
+        elif self.prog.endswith('*') :
+            # prefix match
+            return prog.startswith(self.prog[:-1])
+
+        else :
+            return prog == self.prog
+
+    def filter (self, item) :
+        """
+            Match given item?
+        """
+
+        if self.prog and not self.match_prog(item['prog']) :
+            log.debug("prog: %s: %r", self.prog, item['prog'])
+
+        else :
+            # ok
+            return True
+
+    def __call__ (self, items) :
+        for item in items:
+            if self.filter(item) :
+                yield item
+