123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- #!/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')
|