author | Tero Marttila <terom@fixme.fi> |
Fri, 04 Jan 2013 23:47:53 +0200 | |
changeset 69 | 9da998198936 |
parent 67 | 3324ed10c42f |
child 70 | c8ec745a2aaa |
permissions | -rw-r--r-- |
31
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
1 |
import datetime, time |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
2 |
import re |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
3 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
4 |
import logging; log = logging.getLogger('pvl.syslog.parser') |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
5 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
6 |
class SyslogParser (object) : |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
7 |
""" |
44
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
43
diff
changeset
|
8 |
Parse syslog lines in text format, as used in logfiles/fifos. |
31
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
9 |
""" |
69
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
10 |
|
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
11 |
SEVERITIES = dict(enumerate(( |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
12 |
'emerg', |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
13 |
'alert', |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
14 |
'crit', |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
15 |
'err', |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
16 |
'warning', |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
17 |
'notice', |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
18 |
'info', |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
19 |
'debug', |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
20 |
))) |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
21 |
|
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
22 |
FACILITIES = dict(enumerate(( |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
23 |
'kern', # 0 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
24 |
'user', # 1 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
25 |
'mail', # 2 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
26 |
'daemon', # 3 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
27 |
'auth', # 4 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
28 |
'syslog', # 5 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
29 |
'lpr', # 6 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
30 |
'news', # 7 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
31 |
'uucp', # 8 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
32 |
'cron', # 9 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
33 |
'authpriv', # 10 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
34 |
'ftp', # 11 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
35 |
'ntp', # 12 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
36 |
'audit', # 13 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
37 |
'alert', # 14 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
38 |
'clock', # 15 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
39 |
'local0', # 16 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
40 |
'local1', # 17 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
41 |
'local2', # 18 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
42 |
'local3', # 19 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
43 |
'local4', # 20 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
44 |
'local5', # 21 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
45 |
'local6', # 22 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
46 |
'local7', # 23 |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
47 |
))) |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
48 |
|
31
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
49 |
# default syslogd format |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
50 |
SYSLOG_RE = re.compile( |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
51 |
# the timestamp+hostname header |
67
3324ed10c42f
pvl.syslog.parser: missing hostname in 'last message repeated ... times' messages
Tero Marttila <terom@fixme.fi>
parents:
44
diff
changeset
|
52 |
# XXX: hostname may be missing |
3324ed10c42f
pvl.syslog.parser: missing hostname in 'last message repeated ... times' messages
Tero Marttila <terom@fixme.fi>
parents:
44
diff
changeset
|
53 |
# at least in Ubuntu 11.10 syslogd 'last message repeated 2 times'... |
69
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
54 |
r'(?:<(?P<pri>\d+|(?P<facility>\w+)\.(?P<severity>\w+))>)?' |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
55 |
+ r'(?P<timestamp>\w{3} [0-9 ][0-9] \d{2}:\d{2}:\d{2}) (?P<hostname>\S+)? ' |
31
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
56 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
57 |
# the message, including possible tag/pid |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
58 |
+ r"(?P<message>(?P<tag>(?P<program>[^:\]]+)(?:\[(?P<pid>\d+)\])?: )?(?P<text>.*))\n?" |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
59 |
) |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
60 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
61 |
TIMESTAMP_FMT = '%b %d %H:%M:%S' |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
62 |
|
44
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
43
diff
changeset
|
63 |
def __init__ (self, raw=False) : |
31
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
64 |
""" |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
65 |
Using given underlying line source. |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
66 |
""" |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
67 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
68 |
self.raw = raw |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
69 |
|
69
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
70 |
def parse_pri (self, match) : |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
71 |
""" |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
72 |
Parse pri/facility/severity. |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
73 |
""" |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
74 |
|
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
75 |
pri = match.group('pri') |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
76 |
facility = match.group('facility') |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
77 |
severity = match.group('severity') |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
78 |
|
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
79 |
if pri.isdigit() : |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
80 |
pri = int(pri) |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
81 |
facility, severity = divmod(pri, 8) |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
82 |
|
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
83 |
return dict( |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
84 |
pri = pri, |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
85 |
severity = self.SEVERITIES.get(severity, severity), |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
86 |
facility = self.FACILITIES.get(facility, facility) |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
87 |
) |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
88 |
|
31
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
89 |
def parse_timestamp (self, match) : |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
90 |
""" |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
91 |
Parse timstamp from line into datetime. |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
92 |
""" |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
93 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
94 |
timestamp = match.group('timestamp') |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
95 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
96 |
# add missing year; assume current |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
97 |
timestamp = time.strftime('%Y') + ' ' + timestamp |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
98 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
99 |
# k |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
100 |
timestamp = datetime.datetime.strptime(timestamp, '%Y ' + self.TIMESTAMP_FMT) |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
101 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
102 |
return timestamp |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
103 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
104 |
def parse_prog (self, match) : |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
105 |
""" |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
106 |
Parse prog from line. |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
107 |
""" |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
108 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
109 |
prog = match.group('program') |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
110 |
|
44
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
43
diff
changeset
|
111 |
if prog : |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
43
diff
changeset
|
112 |
return prog |
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
43
diff
changeset
|
113 |
else : |
31
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
114 |
# no tag |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
115 |
return None |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
116 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
117 |
def parse (self, line) : |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
118 |
""" |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
119 |
Parse given input line into SyslogMessage. |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
120 |
""" |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
121 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
122 |
# ignore whitespace |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
123 |
line = line.strip() |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
124 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
125 |
# debug |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
126 |
log.debug("%s", line) |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
127 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
128 |
# timestamp? |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
129 |
if self.raw : |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
130 |
# from defaults |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
131 |
return dict( |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
132 |
timestamp = datetime.datetime.now(), # XXX: None? |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
133 |
host = None, |
44
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
43
diff
changeset
|
134 |
prog = None, |
31
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
135 |
pid = None, |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
136 |
msg = line, |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
137 |
) |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
138 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
139 |
else : |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
140 |
# parse |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
141 |
match = self.SYSLOG_RE.match(line) |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
142 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
143 |
if not match : |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
144 |
log.warn("Unparseable syslog message: %r", line) |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
145 |
return |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
146 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
147 |
# parse |
69
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
148 |
item = dict( |
31
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
149 |
timestamp = self.parse_timestamp(match), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
150 |
host = match.group('hostname'), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
151 |
prog = self.parse_prog(match), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
152 |
pid = match.group('pid'), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
153 |
msg = match.group('text'), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
154 |
) |
69
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
155 |
|
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
156 |
# facility/severity prefix? |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
157 |
if match.group('pri') : |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
158 |
item.update(self.parse_pri(match)) |
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
159 |
|
9da998198936
pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents:
67
diff
changeset
|
160 |
return item |
31
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
161 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
162 |
def process (self, lines) : |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
163 |
""" |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
164 |
Yield SyslogMessages from given series of lines. |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
165 |
""" |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
166 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
167 |
for line in lines : |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
168 |
item = self.parse(line) |
44
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
43
diff
changeset
|
169 |
|
977442ccb72d
pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents:
43
diff
changeset
|
170 |
if item : |
31
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
171 |
yield item |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
172 |
|
43
9d13b101beab
pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents:
31
diff
changeset
|
173 |
__call__ = process |
31
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
174 |