author | Tero Marttila <terom@fixme.fi> |
Thu, 03 Jan 2013 13:04:51 +0200 | |
changeset 45 | 10dfa434da77 |
parent 44 | 977442ccb72d |
child 52 | f04df0db2acd |
permissions | -rw-r--r-- |
44
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
import logging; log = logging.getLogger('pvl.syslog.filter') |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
2 |
|
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
3 |
class SyslogFilter (object) : |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
4 |
""" |
45 | 5 |
Match syslog messages. |
6 |
||
7 |
XXX: do we need more than just prog? |
|
44
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
8 |
""" |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
9 |
|
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
10 |
def __init__ (self, prog=None) : |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
11 |
""" |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
12 |
prog - match tag (process name) |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
13 |
""" |
45 | 14 |
|
44
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
15 |
self.prog = prog |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
16 |
|
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
17 |
def match_prog (self, prog) : |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
18 |
""" |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
19 |
Match given prog? |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
20 |
""" |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
21 |
|
45 | 22 |
if not self.prog : |
23 |
return |
|
24 |
||
44
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
25 |
# normalize |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
26 |
prog = prog.lower() |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
27 |
|
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
28 |
if prog.startswith('/') : |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
29 |
# base |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
30 |
prog = prog.split('/')[-1] |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
31 |
|
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
32 |
# match |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
33 |
if not prog : |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
34 |
# never matches non-tagged lines |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
35 |
return False |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
36 |
|
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
37 |
elif self.prog.endswith('*') : |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
38 |
# prefix match |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
39 |
return prog.startswith(self.prog[:-1]) |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
40 |
|
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
41 |
else : |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
42 |
return prog == self.prog |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
43 |
|
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
44 |
def filter (self, item) : |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
45 |
""" |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
46 |
Match given item? |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
47 |
""" |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
48 |
|
45 | 49 |
for attr, func in ( |
50 |
( 'prog', self.match_prog), |
|
51 |
) : |
|
52 |
match = func(item[attr]) |
|
44
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
53 |
|
45 | 54 |
if match : |
55 |
continue |
|
56 |
||
57 |
elif match is None : |
|
58 |
pass |
|
59 |
||
60 |
else : |
|
61 |
break |
|
62 |
||
63 |
# ok |
|
64 |
if match is None : |
|
65 |
# XXX: empty filter!? |
|
66 |
return True |
|
44
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
67 |
else : |
45 | 68 |
return match |
44
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
69 |
|
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
70 |
def __call__ (self, items) : |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
71 |
for item in items: |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
72 |
if self.filter(item) : |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
73 |
yield item |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
74 |