#!/usr/bin/env python import os os.environ['DJANGO_SETTINGS_MODULE'] = 'mymontools.settings' import django django.setup() ############################################################################## import re import sys import syslog from django.core.validators import validate_ipv46_address, ValidationError from django.utils import timezone from traps.models import * from traps.tools import * from traps.translate import translate_trapoid_to_name ############################################################################## syslog.openlog(ident='MyMonTools Traphandler', logoption=syslog.LOG_PID, facility=syslog.LOG_DAEMON) syslog.syslog(syslog.LOG_INFO, 'MyMonTools Traphandler started') lines = sys.stdin.readlines() if len(lines) < 3: sys.exit(1) trap = Trap() # FIXME: Strip DNS-Domain trap.hostname = lines[0].replace('.treuchtlingen.stadt', '').replace('.treuchtlingen.de', '').lstrip().rstrip() trap.agent = lines[1].lstrip().rstrip() trap.traptime = timezone.make_aware( datetime.datetime.now() , timezone.get_current_timezone() ) ip = re.search(r'\[([\d\.:a-fA-F]+)\]', trap.agent) if ip: try: ip = ip.groups()[0] validate_ipv46_address( ip ) trap.agentip = ip except (ValidationError, IndexError): pass varbinds = {} for line in lines[2:]: (oid, value) = line.split(' ',1) varbinds[oid] = value # SNMPv2-MIB::snmpTrapOID.0 try: trap.trapoid = varbinds.pop('.1.3.6.1.6.3.1.1.4.1.0').lstrip().rstrip() except KeyError: sys.exit(2) # SNMP-COMMUNITY-MIB::snmpTrapAddress.0 #try: # trap.agentip = varbinds.pop('.1.3.6.1.6.3.18.1.3.0').lstrip().rstrip() #except KeyError: # pass # SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 try: trap.community = varbinds.pop('.1.3.6.1.6.3.18.1.4.0').lstrip().rstrip() except KeyError: pass # SNMPv2-MIB::snmpTrapEnterprise.0 try: trap.enterprise = varbinds.pop('.1.3.6.1.6.3.1.1.4.3.0').lstrip().rstrip() except KeyError: pass trap.save() syslog.syslog(syslog.LOG_NOTICE, u'MyMonTools Trap saved: %s' % trap) for (oid, value) in varbinds.iteritems(): tvb = TrapVarbind() tvb.trap = trap tvb.oid = oid.lstrip().rstrip() tvb.value = value.lstrip().rstrip() tvb.save() syslog.syslog(syslog.LOG_INFO, u'MyMonTools VarBindings saved') ############################################################################## oidname = translate_trapoid_to_name(trap.trapoid) if oidname: trap.trapname = oidname trap.save() syslog.syslog(syslog.LOG_INFO, u'MyMonTools Trap-OID translated') ############################################################################## # FIXME:#56 Auch je nach VarBinding unterschiedliche Configs/Category/Severity try: cfgtrap = CfgTrap.objects.get(trapoid=trap.trapoid) except CfgTrap.DoesNotExist: cfgtrap = None if cfgtrap: trap.category = cfgtrap.category trap.severity = cfgtrap.severity trap.save() syslog.syslog(syslog.LOG_INFO, u'MyMonTools Trap categorized') else: syslog.syslog(syslog.LOG_INFO, u'MyMonTools No trap configuration found')