|
@@ -9,6 +9,7 @@ django.setup()
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
|
+import optparse
|
|
|
import re
|
|
|
import sys
|
|
|
import syslog
|
|
@@ -22,12 +23,40 @@ 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')
|
|
|
+parser = optparse.OptionParser()
|
|
|
+
|
|
|
+parser.add_option('', '--no-syslog', dest='syslog', action='store_false', default=True, help='Dissable syslog')
|
|
|
+
|
|
|
+parser.add_option('-v', '--verbose', dest='verb', action='count', default=0, help='Be verbose')
|
|
|
+
|
|
|
+(opts, args) = parser.parse_args()
|
|
|
+
|
|
|
+#####
|
|
|
+
|
|
|
+opts.verb = min( opts.verb, 3 )
|
|
|
+
|
|
|
+if opts.syslog:
|
|
|
+ syslog.openlog(ident='MyMonTools_Traphandler', logoption=syslog.LOG_PID, facility=syslog.LOG_DAEMON)
|
|
|
+
|
|
|
+##############################################################################
|
|
|
+
|
|
|
+verbose2syslog = [syslog.LOG_ERR, syslog.LOG_WARNING, syslog.LOG_NOTICE, syslog.LOG_INFO]
|
|
|
+
|
|
|
+def logit(prio, msg):
|
|
|
+ if prio <= opts.verb:
|
|
|
+ if opts.syslog:
|
|
|
+ syslog.syslog(verbose2syslog[prio], msg)
|
|
|
+ else:
|
|
|
+ print u'>>> V%1d: %s' % (prio, msg)
|
|
|
+
|
|
|
+##############################################################################
|
|
|
+
|
|
|
+logit(2, 'Traphandler started')
|
|
|
|
|
|
lines = sys.stdin.readlines()
|
|
|
|
|
|
if len(lines) < 3:
|
|
|
+ logit(0, 'Trap is incomplete, exiting...')
|
|
|
sys.exit(1)
|
|
|
|
|
|
trap = Trap()
|
|
@@ -47,7 +76,11 @@ if ip:
|
|
|
|
|
|
varbinds = {}
|
|
|
for line in lines[2:]:
|
|
|
- (oid, value) = line.split(' ',1)
|
|
|
+ try:
|
|
|
+ (oid, value) = line.split(' ',1)
|
|
|
+ except ValueError:
|
|
|
+ logit(0, 'Read data is corrupt, exiting...')
|
|
|
+ sys.exit(1)
|
|
|
varbinds[oid] = value
|
|
|
|
|
|
|
|
@@ -55,7 +88,8 @@ for line in lines[2:]:
|
|
|
try:
|
|
|
trap.trapoid = varbinds.pop('.1.3.6.1.6.3.1.1.4.1.0').lstrip().rstrip()
|
|
|
except KeyError:
|
|
|
- sys.exit(2)
|
|
|
+ logit(0, 'Trap does not contain snmpTrapOID, exiting...')
|
|
|
+ sys.exit(1)
|
|
|
|
|
|
# SNMP-COMMUNITY-MIB::snmpTrapAddress.0
|
|
|
#try:
|
|
@@ -67,32 +101,45 @@ except KeyError:
|
|
|
try:
|
|
|
trap.community = varbinds.pop('.1.3.6.1.6.3.18.1.4.0').lstrip().rstrip()
|
|
|
except KeyError:
|
|
|
- pass
|
|
|
+ logit(3, 'Trap does not contain snmpTrapCommunity (SNMPv1 only - not fatal)')
|
|
|
|
|
|
# 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
|
|
|
+ logit(3, 'Trap does not contain snmpTrapEnterprise (SNMPv1 only - not fatal)')
|
|
|
|
|
|
-trap.save()
|
|
|
-syslog.syslog(syslog.LOG_NOTICE, u'MyMonTools Trap saved: %s' % trap)
|
|
|
+try:
|
|
|
+ trap.save()
|
|
|
+except:
|
|
|
+ logit(0, u'Could not save trap, exiting...')
|
|
|
+ sys.exit(1)
|
|
|
|
|
|
+logit(2, u'Trap saved: %s' % trap)
|
|
|
+
|
|
|
+# Save VarBindings
|
|
|
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')
|
|
|
+ try:
|
|
|
+ tvb.save()
|
|
|
+ except:
|
|
|
+ logit(0, u'Could not save one VarBinding')
|
|
|
+
|
|
|
+logit(2, u'VarBindings saved')
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
|
+# Translate TrapOID to TrapName
|
|
|
oidname = translate_trapoid_to_name(trap.trapoid)
|
|
|
if oidname:
|
|
|
trap.trapname = oidname
|
|
|
trap.save()
|
|
|
-syslog.syslog(syslog.LOG_INFO, u'MyMonTools Trap-OID translated')
|
|
|
+ logit(3, u'Trap-OID translated')
|
|
|
+else:
|
|
|
+ logit(3, u'Trap-OID could not be translated')
|
|
|
|
|
|
##############################################################################
|
|
|
|
|
@@ -106,7 +153,10 @@ if cfgtrap:
|
|
|
trap.category = cfgtrap.category
|
|
|
trap.severity = cfgtrap.severity
|
|
|
trap.save()
|
|
|
- syslog.syslog(syslog.LOG_INFO, u'MyMonTools Trap categorized')
|
|
|
+ syslog.syslog(syslog.LOG_NOTICE, u'Trap categorized')
|
|
|
+ logit(3, u'Trap config found, trap categorized')
|
|
|
else:
|
|
|
- syslog.syslog(syslog.LOG_INFO, u'MyMonTools No trap configuration found')
|
|
|
+ logit(2, u'No Trap config found for trap %s' % trap.trapoid)
|
|
|
+
|
|
|
+logit(2, u'Traphandler finished')
|
|
|
|