pvl/syslog/rule.py
author Tero Marttila <terom@fixme.fi>
Fri, 04 Jan 2013 23:47:31 +0200
changeset 68 bea41de5cc98
parent 66 1e3a144f25c0
child 76 60bdff4bedfb
permissions -rw-r--r--
pvl.syslog.filter: reject empty progs
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)
66
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
    46
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
    47
        return cls.config_section(file.name, config)
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
    48
    
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
    49
    @classmethod
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
    50
    def config_section (cls, name, section) :
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
    51
        """
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
    52
            Recursively load Syslogrules from config section.
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
    53
        """
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
    54
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
    55
        rules = [cls.config_section(subsection, section[subsection]) for subsection in section.sections]
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
    56
        attrs = dict((name, section[name]) for name in section.scalars)
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
    57
         
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
    58
        return cls.config(name, rules=rules, **attrs)
45
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    60
    @classmethod
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    61
    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
    62
        """
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    63
            Build SyslogRule from config options
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    64
        """
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    65
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    66
        if pattern :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    67
            pattern = re.compile(pattern)
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    68
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    69
        if format :
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    70
            format = { name: format }
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    71
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    72
        filters = dict(
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    73
            (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
    74
        )
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    75
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    76
        if program :
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    77
            filters['prog'] = program
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    78
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    79
        if pattern :
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    80
            filters['msg'] = pattern
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    81
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    82
        filter = SyslogFilter(**filters)
66
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
    83
        
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
    84
        log.debug("%s: %s %s", name, rules, filter)
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    85
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    86
        return cls(name, rules, filter, format)
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    87
66
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
    88
    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
    89
        self.name = name
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    90
        self.rules = rules or [] # sub-rules
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    91
        self.filter = filter # SyslogFilter
66
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
    92
        self.formats = formats or {}
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    93
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    94
    def match (self, item) :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    95
        """
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    96
            Match item against our filter, applying any matches.
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    97
        """
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    98
        
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
    99
        if self.filter :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   100
            # filter
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   101
            matches = self.filter.filter(item)
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   102
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   103
        else :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   104
            # match all
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   105
            matches = True
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   106
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   107
        log.debug("%s: %s", self, matches)
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   108
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   109
        if not matches :
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   110
            # ignore
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   111
            return None
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   112
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   113
        # apply
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   114
        item['rule'] = self
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   115
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   116
        if matches is True :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   117
            # no-op filter
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   118
            pass
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   119
        else :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   120
            item.update(matches)
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   121
        
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   122
        # XXX: copy, not mutate?
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   123
        return item
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   124
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   125
    def format (self, item) :
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   126
        """
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   127
            Apply output formats
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   128
        """
66
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
   129
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
   130
        out = {}
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   131
        
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   132
        for attr, format in self.formats.iteritems() :
66
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
   133
            value = out[attr] = format.format(**item)
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   134
            log.debug("%s: %s: %s", self, attr, value)
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   135
        
66
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
   136
        return out
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   137
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   138
    # TODO: __call__?
45
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   139
    def apply (self, item) :
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   140
        """
66
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
   141
            Match item against ourself, apply against any sub-rules, and return output, if hit.
45
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
        """
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   143
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   144
        item = self.match(item)
45
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   145
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   146
        if not item :
66
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
   147
            # skip
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   148
            return
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   149
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   150
        # sub-rules
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   151
        for rule in self.rules :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   152
            try :
66
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
   153
                out = rule.apply(item)
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   154
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   155
            except Exception as ex :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   156
                log.exception("rule %s: %r", rule, item)
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   157
                return # XXX: skip?
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   158
66
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
   159
            if out :
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
   160
                # hit
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
   161
                return out
45
10dfa434da77 pvl.syslog: SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   162
            
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   163
        # TODO: routing/formatting
58
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   164
        #if self.tag is False :
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   165
        #    # drop
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   166
        #    return False
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   167
    
64885a7c6e85 pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   168
        if self.formats :
66
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
   169
            # hit
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
   170
            item.update(self.format(item))
1e3a144f25c0 pvl.syslog: nested sections
Tero Marttila <terom@fixme.fi>
parents: 62
diff changeset
   171
        
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   172
        return item
51
96d204b146b4 pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   173
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   174
    def __iter__ (self, items) :
47
eea08cf5fbc7 pvl.syslog: SyslogRules
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   175
        """
eea08cf5fbc7 pvl.syslog: SyslogRules
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   176
            Apply items against our rules, yielding any matches.
eea08cf5fbc7 pvl.syslog: SyslogRules
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   177
        """
eea08cf5fbc7 pvl.syslog: SyslogRules
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   178
eea08cf5fbc7 pvl.syslog: SyslogRules
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   179
        for item in items :
eea08cf5fbc7 pvl.syslog: SyslogRules
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   180
            match = self.apply(item)
eea08cf5fbc7 pvl.syslog: SyslogRules
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   181
eea08cf5fbc7 pvl.syslog: SyslogRules
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   182
            if match :
eea08cf5fbc7 pvl.syslog: SyslogRules
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   183
                yield match
55
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   184
 
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   185
    def __str__ (self) :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   186
        return self.name
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   187
    
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   188
    def __repr__ (self) :
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   189
        return 'SyslogRule({self.name}, ...)'.format(self=self)
cbdd49b76f16 pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents: 51
diff changeset
   190