pvl.hosts: improve HostExtension support enough to move boot= into pvl.hosts.dhcp
"""
Trap handling
"""
TRAP_TYPE = {
# Link Down
2: 'IF-MIB::linkDown',
# Link Up
3: 'IF-MIB::linkUp',
}
# use subtype
TRAP_TYPE_ENTERPRISE = 6
VALUE_TYPE = {
}
def parse_snmptrapd_log (line):
"""
Parse a line of data logged by snmptrapd using the following formats:
format1 %B %N %w %q %W\t%v\n
format2 %B\t%v\n
"""
values = { }
items = line.split('\t')
header = items.pop(0)
if ' ' in header:
# XXX: some kind of compat wrapping of SNMPv1 TRAPs to fit the SNMPv2-TRAP model
host, enterprise, trap_type, trap_subtype, trap_descr = header.split(' ', 4)
trap_type = int(trap_type)
values['SNMPv2-MIB::snmpTrapEnterprise.0'] = enterprise
if trap_type == TRAP_TYPE_ENTERPRISE:
# XXX: no idea why
if trap_subtype.startswith('.'):
trap_oid = enterprise + '.0' + trap_subtype
else:
trap_oid = trap_subtype
else:
trap_oid = TRAP_TYPE.get(trap_type, trap_type)
values['SNMPv2-MIB::snmpTrapOID.0'] = trap_oid
else:
host = header
for item in items:
key, value = item.split(' = ', 1)
value_type, value = value.split(': ', 1)
func = VALUE_TYPE.get(value_type)
if func:
value = func(value)
values[key] = value
return host, values