author | Tero Marttila <terom@paivola.fi> |
Sun, 22 Dec 2013 19:03:57 +0200 | |
changeset 336 | edaa5d0aa57d |
parent 213 | 711f71e7328b |
permissions | -rw-r--r-- |
31
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
1 |
""" |
174
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
2 |
Parse ISC dhcpd messages from pvl.syslog. |
31
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 |
|
174
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
5 |
from pvl.invoke import merge # XXX |
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
6 |
|
31
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
7 |
import re |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
8 |
|
169
a81ca751664d
move pvl.verkko.dhcp and pvl.syslog.dhcp to pvl.dhcp.leases/syslog
Tero Marttila <terom@paivola.fi>
parents:
31
diff
changeset
|
9 |
import logging; log = logging.getLogger('pvl.dhcp.syslog') |
a81ca751664d
move pvl.verkko.dhcp and pvl.syslog.dhcp to pvl.dhcp.leases/syslog
Tero Marttila <terom@paivola.fi>
parents:
31
diff
changeset
|
10 |
|
a81ca751664d
move pvl.verkko.dhcp and pvl.syslog.dhcp to pvl.dhcp.leases/syslog
Tero Marttila <terom@paivola.fi>
parents:
31
diff
changeset
|
11 |
# TODO: use pvl.syslog.rule.SyslogRule? |
a81ca751664d
move pvl.verkko.dhcp and pvl.syslog.dhcp to pvl.dhcp.leases/syslog
Tero Marttila <terom@paivola.fi>
parents:
31
diff
changeset
|
12 |
class DHCPSyslogParser (object) : |
31
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
13 |
""" |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
14 |
Parse SyslogMessages from SyslogParser for ISC dhcp semantics. |
174
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
15 |
|
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
16 |
TODO: BOOTREQUEST from <hwaddr> via <gateway> |
31
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
17 |
""" |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
18 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
19 |
## various message types sent/recieved by dhcpd |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
20 |
# from server/dhcp.c |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
21 |
TYPE_NAMES = ( |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
22 |
"DHCPDISCOVER", |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
23 |
"DHCPOFFER", |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
24 |
"DHCPREQUEST", |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
25 |
"DHCPDECLINE", |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
26 |
"DHCPACK", |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
27 |
"DHCPNAK", |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
28 |
"DHCPRELEASE", |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
29 |
"DHCPINFORM", |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
30 |
"type 9", |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
31 |
"DHCPLEASEQUERY", |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
32 |
"DHCPLEASEUNASSIGNED", |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
33 |
"DHCPLEASEUNKNOWN", |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
34 |
"DHCPLEASEACTIVE" |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
35 |
) |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
36 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
37 |
# message-parsing regexp.. |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
38 |
RECV_MESSAGE_RE = ( |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
39 |
# dhcpdiscover/ack_lease: info/error |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
40 |
# hwaddr: <no identifier> |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
41 |
# hostname: Hostname Unsuitable for Printing |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
42 |
# error: |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
43 |
# peer holds all free leases |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
44 |
# network %s: no free leases |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
45 |
re.compile(r'(?P<type>DHCPDISCOVER) from (?P<hwaddr>.+?)( \((?P<hostname>.+?)\))? via (?P<gateway>.+?)(: (?P<error>.+?))?$'), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
46 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
47 |
# dhcprequest |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
48 |
# error: |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
49 |
# wrong network. |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
50 |
# ignored (not authoritative). |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
51 |
# ignored (unknown subnet). |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
52 |
# lease %s unavailable. |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
53 |
# unknown lease %s. |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
54 |
re.compile(r'(?P<type>DHCPREQUEST) for (?P<lease>.+?)( \((?P<server>.+?)\))? from (?P<hwaddr>.+?)( \((?P<hostname>.+?)\))? via (?P<gateway>.+?)(: (?P<error>.+?))?$'), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
55 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
56 |
# dhcprelease |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
57 |
re.compile(r'(?P<type>DHCPRELEASE) of (?P<lease>.+?) from (?P<hwaddr>.+?)( \((?P<hostname>.+?)\))? via (?P<gateway>.+?) \((?P<found>.+?)\)$'), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
58 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
59 |
# dhcpdecline |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
60 |
# status: |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
61 |
# abandoned |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
62 |
# not found |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
63 |
# ignored |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
64 |
re.compile(r'(?P<type>DHCPDECLINE) of (?P<lease>.+?) from (?P<hwaddr>.+?)( \((?P<hostname>.+?)\))? via (?P<gateway>.+?): (?P<status>.+?)$'), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
65 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
66 |
# dhcpinform |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
67 |
# error: |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
68 |
# ignored (null source address). |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
69 |
# unknown subnet for relay address %s |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
70 |
# unknown subnet for %s address %s |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
71 |
# not authoritative for subnet %s |
193
4db45cb35dc3
pvl.dhcp: docdoc DHCPINFORM?
Tero Marttila <terom@paivola.fi>
parents:
174
diff
changeset
|
72 |
# |
4db45cb35dc3
pvl.dhcp: docdoc DHCPINFORM?
Tero Marttila <terom@paivola.fi>
parents:
174
diff
changeset
|
73 |
# TODO: DHCPINFORM with error indicates rogue dhcp |
31
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
74 |
re.compile(r'(?P<type>DHCPINFORM) from (?P<lease>.+?) via (?P<gateway>.+?)(: (?P<error>.+?))?$'), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
75 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
76 |
# dhcpleasequery |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
77 |
re.compile(r'(?P<type>DHCPLEASEQUERY) from (?P<server>.+?)( for (?P<key_type>IP|client-id|MAC address) (?P<key>.+?))?(: (?P<error>.+?))?$'), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
78 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
79 |
# dhcp: generic/unknown packet |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
80 |
re.compile(r'(?P<type>\w+) from (?P<hwaddr>.+?) via (?P<gateway>.+?): (?P<error>.+?)$'), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
81 |
) |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
82 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
83 |
SEND_MESSAGE_RE = ( |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
84 |
# dhcp_reply |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
85 |
re.compile(r'(?P<type>DHCPACK|DHCPOFFER|BOOTREPLY) on (?P<lease>.+?) to (?P<hwaddr>.+?)( \((?P<hostname>.+?)\))? via (?P<gateway>.+?)$'), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
86 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
87 |
# dhcpinform |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
88 |
# hwaddr: <no client hardware address> |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
89 |
re.compile(r'(?P<type>DHCPACK) to (?P<lease>.+?) \((?P<hwaddr>.+?)\) via (?P<gateway>.+?)$'), |
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 |
# nak_lease |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
92 |
re.compile(r'(?P<type>DHCPNAK) on (?P<lease>.+?) to (?P<hwaddr>.+?) via (?P<gateway>.+?)$'), |
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 |
# dhcpleasequery |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
95 |
re.compile(r'(?P<type>DHCPLEASEUNKNOWN|DHCPLEASEACTIVE|DHCPLEASEUNASSIGNED) to (?P<lease>.+?) for (?P<key_type>IP|client-id|MAC address) (?P<key>.+?) \((?P<count>\d+) associated IPs\)$'), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
96 |
) |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
97 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
98 |
MESSAGE_ERROR_RE = ( |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
99 |
('peer-all-free-leases', re.compile('peer holds all free leases')), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
100 |
('no-free-leases', re.compile(r'network (?P<network>.+?): no free leases')), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
101 |
('wrong-network', re.compile(r'wrong network')), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
102 |
('ignored-not-auth', re.compile(r'ignored \(not authoritative\)')), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
103 |
('ignored-unknown-subnet', re.compile(r'ignored \(unknown subnet\)')), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
104 |
('lease-unavailable', re.compile(r'lease (?P<lease>.+?) unavailable')), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
105 |
('lease-unknown', re.compile(r'unknown lease (?P<lease>.+?).$')), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
106 |
) |
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 |
ERROR_RE = ( |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
109 |
# find_lease |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
110 |
('duplicate-uid-lease', |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
111 |
re.compile(r'uid lease (?P<client>.+?) for client (?P<hwaddr>.+?) is duplicate on (?P<shared_network>.+?)$')), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
112 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
113 |
# dhcprelease |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
114 |
('dhcprelease-requested-address', |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
115 |
re.compile(r'DHCPRELEASE from (?P<hwaddr>.+?) specified requested-address.')), |
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 |
# ??? |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
118 |
('unexpected-icmp-echo-reply', |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
119 |
re.compile(r'unexpected ICMP Echo Reply from (?P<client>.+?)$')), |
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 |
('host-unknown', |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
122 |
re.compile(r'(?P<host>.+?): host unknown.')), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
123 |
) |
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 |
IGNORE_RE = ( |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
126 |
re.compile(r'Wrote (?P<count>\d+) (?P<what>.+?) to leases file.'), |
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 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
129 |
def parse (self, line) : |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
130 |
""" |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
131 |
Match line against our regexps, returning a |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
132 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
133 |
{ |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
134 |
tag: send/recv/error, |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
135 |
type: ..., |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
136 |
[error]: ..., |
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 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
140 |
dict if matched |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
141 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
142 |
Returns False if the message is ignored, or None if the no regexp matched. |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
143 |
""" |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
144 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
145 |
for tag, re_list in ( |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
146 |
('recv', self.RECV_MESSAGE_RE), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
147 |
('send', self.SEND_MESSAGE_RE), |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
148 |
) : |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
149 |
for re in re_list : |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
150 |
# test |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
151 |
match = re.match(line) |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
152 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
153 |
if match : |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
154 |
data = match.groupdict() |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
155 |
data['tag'] = tag |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
156 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
157 |
return data |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
158 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
159 |
# error? |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
160 |
for type, re in self.ERROR_RE: |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
161 |
match = re.match(line) |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
162 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
163 |
if match : |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
164 |
data = match.groupdict() |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
165 |
data['tag'] = 'error' |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
166 |
data['type'] = type |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
167 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
168 |
return data |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
169 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
170 |
# ignore |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
171 |
for re in self.IGNORE_RE : |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
172 |
if re.match(line) : |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
173 |
# ignore |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
174 |
return False |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
175 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
176 |
# unknown |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
177 |
return None |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
178 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
179 |
def parse_error (self, error) : |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
180 |
""" |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
181 |
Match given error status from send/recv against known types, returning a type name or None. |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
182 |
""" |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
183 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
184 |
for type, re in self.MESSAGE_ERROR_RE : |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
185 |
match = re.match(error) |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
186 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
187 |
if match : |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
188 |
return type |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
189 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
190 |
# nope |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
191 |
return None |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
192 |
|
174
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
193 |
def process (self, source) : |
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
194 |
""" |
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
195 |
Process syslog items from given source, yielding parsed DHCP items. |
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
196 |
""" |
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
197 |
|
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
198 |
for item in source : |
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
199 |
dhcp_item = self.parse(item['msg']) |
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
200 |
|
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
201 |
log.debug("%s: %s", item, dhcp_item) |
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
202 |
|
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
203 |
if not dhcp_item : |
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
204 |
# ignore |
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
205 |
continue |
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
206 |
|
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
207 |
item = merge(item, dhcp_item) |
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
208 |
|
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
209 |
if item.get('error') : |
213
711f71e7328b
pvl.dhcp.DHCPSyslogParser: separate error and error-type
Tero Marttila <terom@paivola.fi>
parents:
193
diff
changeset
|
210 |
item['error-type'] = self.parse_error(item['error']) |
174
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
211 |
|
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
212 |
yield item |
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
213 |
|
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
214 |
__call__ = process |
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
215 |
|
6f339a8a87dc
split pvl.dhcp-leases from pvl.syslog-dhcp using pvl.dhcp.hosts/syslog/leases
Tero Marttila <terom@paivola.fi>
parents:
169
diff
changeset
|
216 |
|
31
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
217 |
if __name__ == '__main__' : |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
218 |
import logging |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
219 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
220 |
logging.basicConfig() |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
221 |
|
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
222 |
import doctest |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
223 |
doctest.testmod() |
3e6d0feb115c
pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
224 |