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