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
45
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
from pvl.syslog.filter import SyslogFilter
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
import re
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
import logging; log = logging.getLogger('pvl.syslog.rule')
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
class SyslogRule (object) :
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
    """
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
        A rule matches syslog lines, and formats them.
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
            
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
            tag         - apply given tag to matches
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
    """
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
        
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
    def __init__ (self, tag, program=None, pattern=None, format=None, flags=0) :
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
        pattern = re.compile(pattern, flags)
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
        self.filter = SyslogFilter(prog=program)
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
        self.tag = tag
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
        self.format = format
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
        self.pattern = pattern
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
    def apply (self, item) :
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
        """
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
            Apply rule against given item.
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
        """
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
        
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
        # filter
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
        match = self.filter.filter(item)
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
        log.debug("filter: %s", match)
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
        if not match :
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
            # ignore
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
            return None
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
        
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
        if self.pattern :
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
            match = self.pattern.match(item['msg'])
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
            if not match :
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
                # ignore
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
                return None
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
            
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
            # apply
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
            item.update(match.groupdict())
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
        if self.tag is False :
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
            # drop
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
            return False
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
            
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
        if self.format :
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
            # return
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
            return self.tag, self.format.format(**item)
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54