author | Tero Marttila <terom@paivola.fi> |
Mon, 09 Mar 2015 21:17:06 +0200 | |
changeset 736 | 75938aa0390b |
parent 435 | d10e9db3fb24 |
permissions | -rw-r--r-- |
435
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
1 |
""" |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
2 |
Trap handling |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
3 |
""" |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
4 |
|
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
5 |
TRAP_TYPE = { |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
6 |
# Link Down |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
7 |
2: 'IF-MIB::linkDown', |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
8 |
|
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
9 |
# Link Up |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
10 |
3: 'IF-MIB::linkUp', |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
11 |
} |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
12 |
|
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
13 |
# use subtype |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
14 |
TRAP_TYPE_ENTERPRISE = 6 |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
15 |
|
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
16 |
VALUE_TYPE = { |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
17 |
|
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
18 |
} |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
19 |
|
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
20 |
def parse_snmptrapd_log (line): |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
21 |
""" |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
22 |
Parse a line of data logged by snmptrapd using the following formats: |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
23 |
|
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
24 |
format1 %B %N %w %q %W\t%v\n |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
25 |
format2 %B\t%v\n |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
26 |
""" |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
27 |
|
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
28 |
values = { } |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
29 |
|
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
30 |
items = line.split('\t') |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
31 |
|
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
32 |
header = items.pop(0) |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
33 |
|
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
34 |
if ' ' in header: |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
35 |
# XXX: some kind of compat wrapping of SNMPv1 TRAPs to fit the SNMPv2-TRAP model |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
36 |
host, enterprise, trap_type, trap_subtype, trap_descr = header.split(' ', 4) |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
37 |
|
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
38 |
trap_type = int(trap_type) |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
39 |
|
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
40 |
values['SNMPv2-MIB::snmpTrapEnterprise.0'] = enterprise |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
41 |
|
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
42 |
if trap_type == TRAP_TYPE_ENTERPRISE: |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
43 |
# XXX: no idea why |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
44 |
if trap_subtype.startswith('.'): |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
45 |
trap_oid = enterprise + '.0' + trap_subtype |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
46 |
else: |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
47 |
trap_oid = trap_subtype |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
48 |
else: |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
49 |
trap_oid = TRAP_TYPE.get(trap_type, trap_type) |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
50 |
|
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
51 |
values['SNMPv2-MIB::snmpTrapOID.0'] = trap_oid |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
52 |
else: |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
53 |
host = header |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
54 |
|
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
55 |
for item in items: |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
56 |
key, value = item.split(' = ', 1) |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
57 |
value_type, value = value.split(': ', 1) |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
58 |
|
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
59 |
func = VALUE_TYPE.get(value_type) |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
60 |
|
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
61 |
if func: |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
62 |
value = func(value) |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
63 |
|
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
64 |
values[key] = value |
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
65 |
|
d10e9db3fb24
snmp trap handling using snmptrapd, and parsing using pvl.snmp.traps
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
66 |
return host, values |