pvl/snmp/traps.py
author Tero Marttila <terom@paivola.fi>
Mon, 09 Mar 2015 21:17:06 +0200
changeset 736 75938aa0390b
parent 435 d10e9db3fb24
permissions -rw-r--r--
pvl.hosts.interfaces: remove junos-specifics
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