pvl/syslog/rule.py
changeset 45 10dfa434da77
child 47 eea08cf5fbc7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pvl/syslog/rule.py	Thu Jan 03 13:04:51 2013 +0200
@@ -0,0 +1,54 @@
+from pvl.syslog.filter import SyslogFilter
+
+import re
+
+import logging; log = logging.getLogger('pvl.syslog.rule')
+
+class SyslogRule (object) :
+    """
+        A rule matches syslog lines, and formats them.
+            
+            tag         - apply given tag to matches
+    """
+        
+    def __init__ (self, tag, program=None, pattern=None, format=None, flags=0) :
+        pattern = re.compile(pattern, flags)
+
+        self.filter = SyslogFilter(prog=program)
+
+        self.tag = tag
+        self.format = format
+        self.pattern = pattern
+
+    def apply (self, item) :
+        """
+            Apply rule against given item.
+        """
+        
+        # filter
+        match = self.filter.filter(item)
+
+        log.debug("filter: %s", match)
+
+        if not match :
+            # ignore
+            return None
+        
+        if self.pattern :
+            match = self.pattern.match(item['msg'])
+
+            if not match :
+                # ignore
+                return None
+            
+            # apply
+            item.update(match.groupdict())
+
+        if self.tag is False :
+            # drop
+            return False
+            
+        if self.format :
+            # return
+            return self.tag, self.format.format(**item)
+