#!/usr/bin/env python import os os.environ['DJANGO_SETTINGS_MODULE'] = 'mymontools.settings' import django django.setup() ############################################################################## import optparse import sys from django.http import QueryDict from traps.models import Trap from traps.tools import get_filtered_traps_for_querydict ############################################################################## parser = optparse.OptionParser() parser.add_option('-H', '--hostname', dest='hostname', default=None, help='Filter hostname(s), separated by ","') parser.add_option('-S', '--severity', dest='severity', default=None, help='Filter severity(s), separated by ","') parser.add_option('-C', '--category', dest='category', default=None, help='Filter category(s), separated by ","') parser.add_option('', '--exclude-hostname', dest='exclude_hostname', default=None, help='Exclude hostname(s), separated by ","') parser.add_option('', '--exclude-severity', dest='exclude_severity', default=None, help='Exclude severity(s), separated by ","') parser.add_option('', '--exclude-category', dest='exclude_category', default=None, help='Exclude category(s), separated by ","') parser.add_option('', '--memory', dest='memory', default=None, help='Memory name to save ids for already seen traps') parser.add_option('', '--simulate-maxid', dest='simmaxid', type=long, default=0, help='Simulate remembered maxid') parser.add_option('-v', '--verbose', dest='verb', action='count', default=0, help='Be verbose') (opts, args) = parser.parse_args() if opts.verb >=3: print opts ############################################################################## retstring = ['OK', 'WARNING', 'CRITICAL'] query = QueryDict('', mutable=True) if opts.hostname: [ query.update( {u'hostname': hostname} ) for hostname in opts.hostname.split(',') ] if opts.severity: [ query.update( {u'severity': severity} ) for severity in opts.severity.split(',') ] if opts.category: [ query.update( {u'category': category} ) for category in opts.category.split(',') ] if opts.exclude_hostname: [ query.update( {u'exclude_hostname': hostname} ) for hostname in opts.exclude_hostname.split(',') ] if opts.exclude_severity: [ query.update( {u'exclude_severity': severity} ) for severity in opts.exclude_severity.split(',') ] if opts.exclude_category: [ query.update( {u'exclude_category': category} ) for category in opts.exclude_category.split(',') ] if opts.verb >=2: print(query) traps = get_filtered_traps_for_querydict(query) if opts.memory: try: mem = PluginMemory.objects.get(tag=opts.memory) if opts.verb >=2: print 'Found in DB' except PluginMemory.DoesNotExist: mem = PluginMemory(tag=opts.memory) if opts.verb >=2: print 'Not found in DB' maxid = mem.maxid elif opts.simmaxid: maxid = opts.simmaxid else: maxid = 0 if opts.verb >=2: print 'Maxid is %s' % maxid if maxid: traps = traps.filter(id__gt=maxid) if opts.verb >=3: for trap in traps: print trap maxid = max(maxid, trap.id) if opts.verb >=2: print 'Max ID: %s' % maxid if opts.memory: mem.maxid = maxid mem.save() warn_cnt = traps.filter(severity='WARNING').count() crit_cnt = traps.filter(severity='CRITICAL').count() if opts.verb >=2: print 'Warning traps: %s' % warn_cnt print 'Critical traps: %s' % crit_cnt out = [] retcode = 0 if crit_cnt: retcode = max(2, retcode) out.append('%s critical traps' % crit_cnt) if warn_cnt: retcode = max(1, retcode) out.append('%s warning traps' % warn_cnt) print 'Traps %s: %s%s' % (retstring[retcode], ' and '.join(out), out and ' found in DB' ) sys.exit(retcode)