pvl/syslog/rule.py
author Tero Marttila <terom@fixme.fi>
Fri, 04 Jan 2013 21:31:35 +0200
changeset 62 c4798663e57c
parent 58 64885a7c6e85
child 66 1e3a144f25c0
permissions -rw-r--r--
pvl.syslog.rule: provide format for default rule
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
51
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
     5
import optparse, sys
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
     6
import configobj
51
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
     7
45
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
import logging; log = logging.getLogger('pvl.syslog.rule')
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
51
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    10
def parser (parser) :
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    11
    """
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    12
        Optparse option group.
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    13
    """
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    14
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    15
    syslog_rules = optparse.OptionGroup(parser, "Syslog rules")
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    16
    
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    17
    syslog_rules.add_option('--syslog-rules', metavar='FILE',
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    18
            help="Load syslog rules from file")
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    19
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    20
    return syslog_rules
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    21
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    22
def apply (options) :
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    23
    """
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    24
        Build SyslogRules from options.
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    25
    """
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    26
    
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    27
    if options.syslog_rules :
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    28
        return SyslogRule.load(open(options.syslog_rules))
51
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    29
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    30
    else :
62
c4798663e57c pvl.syslog.rule: provide format for default rule
Tero Marttila <terom@fixme.fi>
parents: 58
diff changeset
    31
        return SyslogRule('default', formats={ 'default': '{msg}' })
51
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    32
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    33
# TODO: combine SyslogRule/Rules into one heirarchial SyslogRule -type?
45
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
class SyslogRule (object) :
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
    """
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    36
        A named SyslogFilter with sub-rules.
45
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
    """
51
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    38
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    39
    @classmethod
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    40
    def load (cls, file) :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    41
        """
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    42
            Load SyslogRule from file.
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    43
        """
45
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    45
        config = configobj.ConfigObj(file)
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    46
        
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    47
        # TODO: sub-sections -> rules?
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    48
        rules = [cls.config(section, **dict(config[section])) for section in config.sections]
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    49
        
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    50
        return cls.config(file.name, rules=rules, **dict((name, config[name]) for name in config.scalars))
45
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    52
    @classmethod
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    53
    def config (cls, name, format=None, program=None, pattern=None, rules=None, **filters) :
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    54
        """
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    55
            Build SyslogRule from config options
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    56
        """
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    57
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    58
        if pattern :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    59
            pattern = re.compile(pattern)
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    60
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    61
        if format :
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    62
            format = { name: format }
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    63
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    64
        filters = dict(
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    65
            (attr, re.compile(regex)) for attr, regex in filters.iteritems()
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    66
        )
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    67
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    68
        if program :
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    69
            filters['prog'] = program
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    70
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    71
        if pattern :
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    72
            filters['msg'] = pattern
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    73
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    74
        filter = SyslogFilter(**filters)
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    75
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    76
        return cls(name, rules, filter, format)
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    77
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    78
    def __init__ (self, name, rules=None, filter=None, formats=None) :
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    79
        log.debug("%s: %s", name, filter)
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    80
        
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    81
        self.name = name
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    82
        self.rules = rules or [] # sub-rules
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    83
        self.filter = filter # SyslogFilter
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    84
        self.formats = formats
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    85
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    86
    def match (self, item) :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    87
        """
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    88
            Match item against our filter, applying any matches.
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    89
        """
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    90
        
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    91
        if self.filter :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    92
            # filter
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    93
            matches = self.filter.filter(item)
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    94
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    95
        else :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    96
            # match all
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    97
            matches = True
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    98
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    99
        log.debug("%s: %s", self, matches)
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   100
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   101
        if not matches :
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   102
            # ignore
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   103
            return None
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   104
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   105
        # apply
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   106
        item['rule'] = self
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   107
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   108
        if matches is True :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   109
            # no-op filter
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   110
            pass
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   111
        else :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   112
            item.update(matches)
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   113
        
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   114
        # XXX: copy, not mutate?
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   115
        return item
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   116
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   117
    def format (self, item) :
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   118
        """
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   119
            Apply output formats
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   120
        """
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   121
        
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   122
        for attr, format in self.formats.iteritems() :
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   123
            value = item[attr] = format.format(**item)
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   124
            log.debug("%s: %s: %s", self, attr, value)
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   125
        
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   126
        return item
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   127
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   128
    # TODO: __call__?
45
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
    def apply (self, item) :
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   130
        """
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   131
            Match item against ourselfs, apply against any sub-rules, and return XXX
45
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   132
        """
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   133
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   134
        item = self.match(item)
45
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   135
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   136
        if not item :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   137
            return
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   138
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   139
        # sub-rules
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   140
        for rule in self.rules :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   141
            try :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   142
                match = rule.apply(item)
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   143
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   144
            except Exception as ex :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   145
                log.exception("rule %s: %r", rule, item)
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   146
                return # XXX: skip?
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   147
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   148
            if match is None :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   149
                continue
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   150
            else :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   151
                item = match
45
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   152
            
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   153
        # TODO: routing/formatting
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   154
        #if self.tag is False :
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   155
        #    # drop
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   156
        #    return False
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   157
    
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   158
        if self.formats :
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   159
            item = self.format(item)        
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   160
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   161
        return item
51
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   162
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   163
    def __iter__ (self, items) :
47
eea08cf5fbc7 pvl.syslog: SyslogRules
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   164
        """
eea08cf5fbc7 pvl.syslog: SyslogRules
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   165
            Apply items against our rules, yielding any matches.
eea08cf5fbc7 pvl.syslog: SyslogRules
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   166
        """
eea08cf5fbc7 pvl.syslog: SyslogRules
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   167
eea08cf5fbc7 pvl.syslog: SyslogRules
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   168
        for item in items :
eea08cf5fbc7 pvl.syslog: SyslogRules
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   169
            match = self.apply(item)
eea08cf5fbc7 pvl.syslog: SyslogRules
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   170
eea08cf5fbc7 pvl.syslog: SyslogRules
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   171
            if match :
eea08cf5fbc7 pvl.syslog: SyslogRules
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   172
                yield match
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   173
 
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   174
    def __str__ (self) :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   175
        return self.name
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   176
    
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   177
    def __repr__ (self) :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   178
        return 'SyslogRule({self.name}, ...)'.format(self=self)
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   179