plugin.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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 optparse
  8. import sys
  9. from django.db.models import Max
  10. from django.http import QueryDict
  11. from plugin.models import PluginMemory
  12. from traps.models import Trap
  13. from traps.tools import get_filtered_traps_for_querydict
  14. from states.models import State
  15. from states.tools import get_filtered_states_for_querydict
  16. ##############################################################################
  17. parser = optparse.OptionParser()
  18. parser.add_option('', '--states', dest='check_states', action='store_true', default=False, help='Check for States instead of Traps')
  19. parser.add_option('-H', '--hostname', dest='hostname', default=None, help='Filter hostname(s), separated by ","')
  20. parser.add_option('-S', '--severity', dest='severity', default=None, help='Filter severity(s), separated by ","')
  21. parser.add_option('-C', '--category', dest='category', default=None, help='Filter category(s), separated by ","')
  22. parser.add_option('', '--exclude-hostname', dest='exclude_hostname', default=None, help='Exclude hostname(s), separated by ","')
  23. parser.add_option('', '--exclude-severity', dest='exclude_severity', default=None, help='Exclude severity(s), separated by ","')
  24. parser.add_option('', '--exclude-category', dest='exclude_category', default=None, help='Exclude category(s), separated by ","')
  25. parser.add_option('', '--include-read', dest='exclude_read', action='store_false', default=True, help='Include read')
  26. parser.add_option('', '--memory', dest='memory', default=None, help='Memory name to save ids for already seen traps')
  27. parser.add_option('', '--simulate-maxid', dest='simmaxid', type=long, default=0, help='Simulate remembered maxid')
  28. parser.add_option('-v', '--verbose', dest='verb', action='count', default=0, help='Be verbose')
  29. (opts, args) = parser.parse_args()
  30. if opts.verb >=3:
  31. print opts
  32. ##############################################################################
  33. retstring = ['OK', 'WARNING', 'CRITICAL']
  34. query = QueryDict('', mutable=True)
  35. if opts.hostname:
  36. [ query.update( {u'hostname': hostname} ) for hostname in opts.hostname.split(',') ]
  37. if opts.severity:
  38. [ query.update( {u'severity': severity} ) for severity in opts.severity.split(',') ]
  39. if opts.category:
  40. [ query.update( {u'category': category} ) for category in opts.category.split(',') ]
  41. if opts.exclude_hostname:
  42. [ query.update( {u'exclude_hostname': hostname} ) for hostname in opts.exclude_hostname.split(',') ]
  43. if opts.exclude_severity:
  44. [ query.update( {u'exclude_severity': severity} ) for severity in opts.exclude_severity.split(',') ]
  45. if opts.exclude_category:
  46. [ query.update( {u'exclude_category': category} ) for category in opts.exclude_category.split(',') ]
  47. if opts.verb >=3:
  48. from pprint import pprint
  49. pprint(query)
  50. if opts.check_states:
  51. objs = get_filtered_states_for_querydict(query)
  52. objname = 'state'
  53. if opts.exclude_read:
  54. objs = objs.filter(read=False)
  55. else:
  56. objs = get_filtered_traps_for_querydict(query)
  57. objname = 'trap'
  58. if opts.exclude_read:
  59. objs = objs.filter(trapread=False)
  60. if opts.memory:
  61. try:
  62. mem = PluginMemory.objects.get(tag=opts.memory)
  63. if opts.verb >=2:
  64. print 'Found in DB'
  65. except PluginMemory.DoesNotExist:
  66. mem = PluginMemory(tag=opts.memory)
  67. if opts.verb >=2:
  68. print 'Not found in DB'
  69. maxid = mem.maxid
  70. elif opts.simmaxid:
  71. maxid = opts.simmaxid
  72. else:
  73. maxid = 0
  74. if opts.verb >=2:
  75. print 'Maxid is %s' % maxid
  76. if maxid:
  77. objs = objs.filter(id__gt=maxid)
  78. if opts.verb >=3:
  79. for obj in objs:
  80. print obj
  81. maxid = max( objs.aggregate(Max('id')).values()[0], maxid )
  82. if opts.verb >=2:
  83. print 'Max ID: %s' % maxid
  84. if opts.memory:
  85. mem.maxid = maxid
  86. mem.save()
  87. warn_cnt = objs.filter(severity='WARNING').count()
  88. crit_cnt = objs.filter(severity='CRITICAL').count()
  89. if opts.verb >=2:
  90. print 'Warning %ss: %s' % (objname, warn_cnt)
  91. print 'Critical %ss: %s' % (objname, crit_cnt)
  92. out = []
  93. retcode = 0
  94. if crit_cnt:
  95. retcode = max(2, retcode)
  96. out.append('%s critical %ss' % (crit_cnt, objname) )
  97. if warn_cnt:
  98. retcode = max(1, retcode)
  99. out.append('%s warning %ss' % (warn_cnt, objname) )
  100. print 'MyMonTools/%ss %s: %s%s' % (objname, retstring[retcode], ' and '.join(out), out and ' found in DB' or 'no warning or critical %s found' % objname)
  101. sys.exit(retcode)