traphandler.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #!/usr/bin/env python
  2. import os
  3. os.environ['DJANGO_SETTINGS_MODULE'] = 'mymontools.settings'
  4. import django
  5. django.setup()
  6. ##############################################################################
  7. import re
  8. import sys
  9. import syslog
  10. from django.core.validators import validate_ipv46_address, ValidationError
  11. from django.utils import timezone
  12. from traps.models import *
  13. from traps.tools import *
  14. from traps.translate import translate_trapoid_to_name
  15. ##############################################################################
  16. syslog.openlog(ident='MyMonTools Traphandler', logoption=syslog.LOG_PID, facility=syslog.LOG_DAEMON)
  17. syslog.syslog(syslog.LOG_INFO, 'MyMonTools Traphandler started')
  18. lines = sys.stdin.readlines()
  19. if len(lines) < 3:
  20. sys.exit(1)
  21. trap = Trap()
  22. # FIXME: Strip DNS-Domain
  23. trap.hostname = lines[0].replace('.treuchtlingen.stadt', '').replace('.treuchtlingen.de', '').lstrip().rstrip()
  24. trap.agent = lines[1].lstrip().rstrip()
  25. trap.traptime = timezone.make_aware( datetime.datetime.now() , timezone.get_current_timezone() )
  26. ip = re.search(r'\[([\d\.:a-fA-F]+)\]', trap.agent)
  27. if ip:
  28. try:
  29. ip = ip.groups()[0]
  30. validate_ipv46_address( ip )
  31. trap.agentip = ip
  32. except (ValidationError, IndexError):
  33. pass
  34. varbinds = {}
  35. for line in lines[2:]:
  36. (oid, value) = line.split(' ',1)
  37. varbinds[oid] = value
  38. # SNMPv2-MIB::snmpTrapOID.0
  39. try:
  40. trap.trapoid = varbinds.pop('.1.3.6.1.6.3.1.1.4.1.0').lstrip().rstrip()
  41. except KeyError:
  42. sys.exit(2)
  43. # SNMP-COMMUNITY-MIB::snmpTrapAddress.0
  44. #try:
  45. # trap.agentip = varbinds.pop('.1.3.6.1.6.3.18.1.3.0').lstrip().rstrip()
  46. #except KeyError:
  47. # pass
  48. # SNMP-COMMUNITY-MIB::snmpTrapCommunity.0
  49. try:
  50. trap.community = varbinds.pop('.1.3.6.1.6.3.18.1.4.0').lstrip().rstrip()
  51. except KeyError:
  52. pass
  53. # SNMPv2-MIB::snmpTrapEnterprise.0
  54. try:
  55. trap.enterprise = varbinds.pop('.1.3.6.1.6.3.1.1.4.3.0').lstrip().rstrip()
  56. except KeyError:
  57. pass
  58. trap.save()
  59. syslog.syslog(syslog.LOG_NOTICE, u'MyMonTools Trap saved: %s' % trap)
  60. for (oid, value) in varbinds.iteritems():
  61. tvb = TrapVarbind()
  62. tvb.trap = trap
  63. tvb.oid = oid.lstrip().rstrip()
  64. tvb.value = value.lstrip().rstrip()
  65. tvb.save()
  66. syslog.syslog(syslog.LOG_INFO, u'MyMonTools VarBindings saved')
  67. ##############################################################################
  68. oidname = translate_trapoid_to_name(trap.trapoid)
  69. if oidname:
  70. trap.trapname = oidname
  71. trap.save()
  72. syslog.syslog(syslog.LOG_INFO, u'MyMonTools Trap-OID translated')
  73. ##############################################################################
  74. # FIXME:#56 Auch je nach VarBinding unterschiedliche Configs/Category/Severity
  75. try:
  76. cfgtrap = CfgTrap.objects.get(trapoid=trap.trapoid)
  77. except CfgTrap.DoesNotExist:
  78. cfgtrap = None
  79. if cfgtrap:
  80. trap.category = cfgtrap.category
  81. trap.severity = cfgtrap.severity
  82. trap.save()
  83. syslog.syslog(syslog.LOG_INFO, u'MyMonTools Trap categorized')
  84. else:
  85. syslog.syslog(syslog.LOG_INFO, u'MyMonTools No trap configuration found')