author | Tero Marttila <terom@paivola.fi> |
Sat, 12 Jan 2013 21:41:32 +0200 | |
changeset 99 | 8d60eb5604e4 |
parent 87 | 70edcd13a447 |
child 100 | 0f34cf81b9f1 |
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 : |
87
70edcd13a447
pvl.syslog.rule: fix default rule and empty text format
Tero Marttila <terom@paivola.fi>
parents:
76
diff
changeset
|
31 |
return SyslogRule('default', formats={ 'text': '{msg}' }) |
51
96d204b146b4
pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
32 |
|
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
33 |
def merge (*dicts, **kwargs) : |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
34 |
return dict((k, v) for d in (dicts + (kwargs, )) for k, v in d.iteritems()) |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
35 |
|
51
96d204b146b4
pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
36 |
# TODO: combine SyslogRule/Rules into one heirarchial SyslogRule -type? |
45 | 37 |
class SyslogRule (object) : |
38 |
""" |
|
55
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
39 |
A named SyslogFilter with sub-rules. |
45 | 40 |
""" |
51
96d204b146b4
pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
41 |
|
55
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
42 |
@classmethod |
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
43 |
def load (cls, file) : |
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
44 |
""" |
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
45 |
Load SyslogRule from file. |
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
46 |
""" |
45 | 47 |
|
55
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
48 |
config = configobj.ConfigObj(file) |
66 | 49 |
|
50 |
return cls.config_section(file.name, config) |
|
51 |
||
52 |
@classmethod |
|
53 |
def config_section (cls, name, section) : |
|
54 |
""" |
|
55 |
Recursively load Syslogrules from config section. |
|
56 |
""" |
|
57 |
||
58 |
rules = [cls.config_section(subsection, section[subsection]) for subsection in section.sections] |
|
59 |
attrs = dict((name, section[name]) for name in section.scalars) |
|
60 |
||
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
61 |
return cls.config(name, rules, **attrs) |
45 | 62 |
|
55
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
63 |
@classmethod |
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
64 |
def config (cls, name, rules=None, format=None, irk=None, program=None, facility=None, pattern=None, **filters) : |
55
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 |
Build SyslogRule from config options |
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
67 |
""" |
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
68 |
|
87
70edcd13a447
pvl.syslog.rule: fix default rule and empty text format
Tero Marttila <terom@paivola.fi>
parents:
76
diff
changeset
|
69 |
if format is not None : |
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
70 |
format = { 'text': format } |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
71 |
else : |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
72 |
format = { } |
55
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
73 |
|
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
74 |
if irk : |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
75 |
format['irk'] = irk |
55
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
76 |
|
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
77 |
filters = dict( |
58
64885a7c6e85
pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents:
55
diff
changeset
|
78 |
(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
|
79 |
) |
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
80 |
|
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
81 |
if facility : |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
82 |
filters['facility'] = facility # glob |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
83 |
|
58
64885a7c6e85
pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents:
55
diff
changeset
|
84 |
if program : |
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
85 |
filters['prog'] = program # glob |
55
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
86 |
|
58
64885a7c6e85
pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents:
55
diff
changeset
|
87 |
if pattern : |
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
88 |
filters['msg'] = re.compile(pattern) |
55
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
89 |
|
58
64885a7c6e85
pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents:
55
diff
changeset
|
90 |
filter = SyslogFilter(**filters) |
66 | 91 |
|
92 |
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
|
93 |
|
64885a7c6e85
pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents:
55
diff
changeset
|
94 |
return cls(name, rules, filter, format) |
64885a7c6e85
pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents:
55
diff
changeset
|
95 |
|
66 | 96 |
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
|
97 |
self.name = name |
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
98 |
self.rules = rules or [] # sub-rules |
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
99 |
self.filter = filter # SyslogFilter |
66 | 100 |
self.formats = formats or {} |
55
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
101 |
|
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
102 |
def match (self, item) : |
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
103 |
""" |
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
104 |
Match item against our filter, returning match-dict (empty?) or None. |
55
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
105 |
""" |
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
106 |
|
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
107 |
if self.filter : |
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
108 |
# filter |
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
109 |
matches = self.filter.filter(item) |
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
110 |
|
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
111 |
else : |
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
112 |
# match all, we probably have sub-rules that we're interested in |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
113 |
return { } |
55
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
114 |
|
58
64885a7c6e85
pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents:
55
diff
changeset
|
115 |
log.debug("%s: %s", self, matches) |
64885a7c6e85
pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents:
55
diff
changeset
|
116 |
|
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
117 |
if matches : |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
118 |
return matches |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
119 |
else : |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
120 |
# no match |
58
64885a7c6e85
pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents:
55
diff
changeset
|
121 |
return None |
64885a7c6e85
pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents:
55
diff
changeset
|
122 |
|
64885a7c6e85
pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents:
55
diff
changeset
|
123 |
def format (self, item) : |
64885a7c6e85
pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents:
55
diff
changeset
|
124 |
""" |
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
125 |
Apply our output formats to given base apply, yielding (unique) attr, value tuples. |
58
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 |
|
64885a7c6e85
pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents:
55
diff
changeset
|
128 |
for attr, format in self.formats.iteritems() : |
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
129 |
value = format.format(**item) |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
130 |
|
58
64885a7c6e85
pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents:
55
diff
changeset
|
131 |
log.debug("%s: %s: %s", self, attr, value) |
64885a7c6e85
pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents:
55
diff
changeset
|
132 |
|
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
133 |
yield attr, value |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
134 |
|
45 | 135 |
def apply (self, item) : |
136 |
""" |
|
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
137 |
Recursively match item against ourself and sub-rules. Returns applied output. |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
138 |
|
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
139 |
Matches are passed down the tree, and applies are passed up. |
45 | 140 |
""" |
141 |
||
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
142 |
log.debug("%s", self) |
45 | 143 |
|
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
144 |
# match rule -> matches |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
145 |
matches = self.match(item) |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
146 |
|
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
147 |
if matches is None : |
66 | 148 |
# skip |
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
149 |
return None, None, None |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
150 |
|
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
151 |
# merge matches down |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
152 |
item = merge(item, matches) |
55
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
153 |
|
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
154 |
# recursive sub-rules -> apply |
55
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
155 |
for rule in self.rules : |
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
156 |
try : |
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
157 |
# pass matches down |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
158 |
match, rules, apply = rule.apply(item) |
55
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
159 |
|
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
160 |
except Exception as ex : |
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
161 |
log.exception("%s -> %s: %r", self, rule, item) |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
162 |
continue # XXX: skip? |
55
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
163 |
|
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
164 |
if apply : |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
165 |
# pass apply up |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
166 |
break |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
167 |
else : |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
168 |
# self-match |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
169 |
match, rules, apply = item, [], { } |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
170 |
|
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
171 |
rules.append(self) |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
172 |
|
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
173 |
# formats? |
58
64885a7c6e85
pvl.syslog.rule: fixfix, implement format
Tero Marttila <terom@fixme.fi>
parents:
55
diff
changeset
|
174 |
if self.formats : |
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
175 |
# merge apply up |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
176 |
apply = merge(dict(self.format(item)), apply) |
66 | 177 |
|
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
178 |
log.debug("%s: %s", '/'.join(str(rule) for rule in rules), apply) |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
179 |
|
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
180 |
return match, rules, apply |
51
96d204b146b4
pvl.syslog.rule: refactor rule-config loading
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
181 |
|
55
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
182 |
def __iter__ (self, items) : |
47 | 183 |
""" |
184 |
Apply items against our rules, yielding any matches. |
|
185 |
""" |
|
186 |
||
187 |
for item in items : |
|
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
188 |
match, rules, apply = self.apply(item) |
47 | 189 |
|
76
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
190 |
if apply : |
60bdff4bedfb
pvl.syslog.rule: implement proper match/apply support
Tero Marttila <terom@paivola.fi>
parents:
66
diff
changeset
|
191 |
yield apply |
55
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
192 |
|
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
193 |
def __str__ (self) : |
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
194 |
return self.name |
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
195 |
|
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
196 |
def __repr__ (self) : |
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
197 |
return 'SyslogRule({self.name}, ...)'.format(self=self) |
cbdd49b76f16
pvl.syslog.rule: refactor SyslogRule
Tero Marttila <terom@fixme.fi>
parents:
51
diff
changeset
|
198 |