浏览代码

Traphandler: Refactored logging

Signed-off-by: Sven Velt <sven@velt.de>
Sven Velt 10 年之前
父节点
当前提交
ae89fe1dda
共有 1 个文件被更改,包括 63 次插入13 次删除
  1. 63 13
      traphandler.py

+ 63 - 13
traphandler.py

@@ -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')