pvl/syslog/filter.py
author Tero Marttila <terom@fixme.fi>
Thu, 03 Jan 2013 13:04:51 +0200
changeset 45 10dfa434da77
parent 44 977442ccb72d
child 52 f04df0db2acd
permissions -rw-r--r--
pvl.syslog: SyslogRule
import logging; log = logging.getLogger('pvl.syslog.filter')

class SyslogFilter (object) :
    """
        Match syslog messages.

        XXX: do we need more than just prog?
    """

    def __init__ (self, prog=None) :
        """
            prog        - match tag (process name)
        """
        
        self.prog = prog

    def match_prog (self, prog) :
        """
            Match given prog?
        """

        if not self.prog :
            return

        # 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?
        """

        for attr, func in (
            ( 'prog',   self.match_prog),
        ) :
            match = func(item[attr])

            if match :
                continue
            
            elif match is None :
                pass

            else :
                break
        
        # ok
        if match is None :
            # XXX: empty filter!?
            return True
        else :
            return match

    def __call__ (self, items) :
        for item in items:
            if self.filter(item) :
                yield item