pvl/syslog/rule.py
author Tero Marttila <terom@fixme.fi>
Thu, 03 Jan 2013 13:04:51 +0200
changeset 45 10dfa434da77
child 47 eea08cf5fbc7
permissions -rw-r--r--
pvl.syslog: SyslogRule
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)