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-- |
45 | 1 |
from pvl.syslog.filter import SyslogFilter |
2 |
||
3 |
import re |
|
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 | 8 |
import logging; log = logging.getLogger('pvl.syslog.rule') |
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 | 34 |
class SyslogRule (object) : |
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 | 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 | 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 | 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 | 129 |
def apply (self, item) : |
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 | 132 |
""" |
133 |
||
55
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
134 |
item = self.match(item) |
45 | 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 | 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 | 164 |
""" |
165 |
Apply items against our rules, yielding any matches. |
|
166 |
""" |
|
167 |
||
168 |
for item in items : |
|
169 |
match = self.apply(item) |
|
170 |
||
171 |
if match : |
|
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 |