views.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. # -*- encoding: utf-8 -*-
  2. from django.core.urlresolvers import reverse
  3. from django.db import connection
  4. from django.http import HttpResponse, HttpResponseRedirect
  5. from django.shortcuts import render
  6. from mymontools.paginate import paginate
  7. from .models import *
  8. from .forms import *
  9. from .tools import get_filtered_traps_for_querydict, get_filtered_cfgtraps_for_querydict
  10. from .translate import *
  11. import json
  12. from pprint import pprint
  13. ##############################################################################
  14. def trap_index(Request):
  15. env = {}
  16. page = Request.GET.get('page')
  17. pprint( Request.GET )
  18. traps = get_filtered_traps_for_querydict(Request.GET)
  19. env['traps'] = paginate(traps, page, 50)
  20. env['trapcount'] = traps.count()
  21. tsf = TrapSimpleFilter(Request.GET)
  22. tsf.fields['hostname'].choices = [ (x, x) for x in Trap.objects.exclude(hostname='').values_list('hostname', flat=True).order_by('hostname').distinct() ]
  23. tsf.fields['trapoid'].choices = [ (oid, trapname or oid) for oid, trapname in Trap.objects.exclude(trapoid='').values_list('trapoid','trapname').order_by('trapname').distinct() ]
  24. tsf.fields['severity'].choices = [ (x, x) for x in Trap.objects.exclude(severity='').values_list('severity', flat=True).order_by('severity').distinct() ] + [ ('__', '<EMPTY>'), ]
  25. tsf.fields['category'].choices = [ (x, x) for x in Trap.objects.exclude(category='').values_list('category', flat=True).order_by('category').distinct() ] + [ ('__', '<EMPTY>'), ]
  26. tsf.fields['trapread'].choices = [ ('False', 'Unread'), ('True', 'Read') ]
  27. env['trapfilter'] = tsf
  28. tse = TrapSimpleExclude(Request.GET)
  29. for field in tsf.fields.keys():
  30. tse.fields[u'exclude_%s' % field].choices = tsf.fields[field].choices
  31. env['trapexclude'] = tse
  32. env['stats_traps_wo_trapname'] = Trap.objects.filter(trapname='').count()
  33. env['stats_traps_wo_category'] = Trap.objects.filter(category='').count()
  34. env['stats_traps_wo_severity'] = Trap.objects.filter(severity='').count()
  35. env['stats_cfgtraps_wo_category'] = CfgTrap.objects.filter(category='').count()
  36. env['stats_cfgtraps_wo_severity'] = CfgTrap.objects.filter(severity='').count()
  37. return render(Request, 'traps/trap_index.html', env)
  38. def trap_modify(Request):
  39. action = Request.POST.get('action') or Request.GET.get('action')
  40. trapID = Request.GET.get('trapID')
  41. trapIDs= Request.POST.getlist('trapIDs')
  42. # FIXME:#45 'archive']:
  43. if not action in ['read', 'delete', ]:
  44. return HttpResponse(u'Action "%s" not implemented' % action )
  45. if trapID:
  46. trapIDs.append(trapID)
  47. if action == 'read':
  48. Trap.objects.filter(id__in=trapIDs).update(trapread=True)
  49. elif action == 'delete':
  50. Trap.objects.filter(id__in=trapIDs).delete()
  51. params = Request.GET.copy()
  52. if 'action' in params:
  53. params.pop('action')
  54. if trapID in params:
  55. params.pop('trapID')
  56. return HttpResponseRedirect( reverse('trap_index') + '?%s' % params.urlencode() )
  57. def config_index(Request):
  58. env = {}
  59. page = Request.GET.get('page')
  60. cfgtraps = get_filtered_cfgtraps_for_querydict(Request.GET)
  61. env['cfgtraps'] = paginate(cfgtraps, page, 50)
  62. env['cfgtrapcount'] = cfgtraps.count()
  63. ctsf = CfgTrapSimpleFilter(Request.GET)
  64. ctsf.fields['severity'].choices = [ (x, x) for x in CfgTrap.objects.exclude(severity='').values_list('severity', flat=True).order_by('severity').distinct() ] + [ ('__', '<EMPTY>'), ]
  65. ctsf.fields['category'].choices = [ (x, x) for x in CfgTrap.objects.exclude(category='').values_list('category', flat=True).order_by('category').distinct() ] + [ ('__', '<EMPTY>'), ]
  66. env['cfgtrapfilter'] = ctsf
  67. ctse = CfgTrapSimpleExclude(Request.GET)
  68. for field in ctsf.fields.keys():
  69. ctse.fields[u'exclude_%s' % field].choices = ctsf.fields[field].choices
  70. env['cfgtrapexclude'] = ctse
  71. env['stats_cfgtraps_wo_category'] = CfgTrap.objects.filter(category='').count()
  72. env['stats_cfgtraps_wo_severity'] = CfgTrap.objects.filter(severity='').count()
  73. return render(Request, 'traps/trap_config_index.html', env)
  74. def config_export(Request):
  75. action = Request.POST.get('action') or Request.GET.get('action')
  76. cfgtrapID = Request.GET.get('cfgtrapID')
  77. cfgtrapIDs= Request.POST.getlist('cfgtrapIDs')
  78. if not action in ['export-json', ]:
  79. return HttpResponse(u'Action "%s" not implemented' % action )
  80. if cfgtrapID:
  81. cfgtrapIDs.append(cfgtrapID)
  82. export_list = []
  83. for cfgtrap in CfgTrap.objects.filter(id__in=cfgtrapIDs):
  84. export_obj = {}
  85. for fieldname in cfgtrap.export_fields:
  86. export_obj[fieldname] = getattr(cfgtrap, fieldname)
  87. export_list.append(export_obj)
  88. export_js = json.dumps(export_list)
  89. return HttpResponse(export_js, content_type='application/json')
  90. def config_trapoid(Request, trapoid):
  91. env = {}
  92. try:
  93. # FIXME:#56 Mehrere, aktiv/inaktiv
  94. cfgtrap = CfgTrap.objects.get(trapoid=trapoid)
  95. except CfgTrap.DoesNotExist:
  96. cfgtrap = CfgTrap(trapoid=trapoid)
  97. env['snmptranslate_trapoid'] = external_snmptranslate(trapoid)
  98. if Request.method == 'POST':
  99. form = CfgTrapForm(Request.POST, instance=cfgtrap)
  100. if form.is_valid():
  101. cfgtrap = form.save()
  102. if Request.POST.get('action') == 'save_update':
  103. with connection.cursor() as c:
  104. c.execute('UPDATE ' + Trap._meta.db_table + ' SET trapname=%s, category=%s, severity=%s WHERE trapoid=%s', [cfgtrap.trapname, cfgtrap.category, cfgtrap.severity, trapoid,])
  105. return HttpResponseRedirect( reverse('trap_config_index') )
  106. else:
  107. form = CfgTrapForm(instance=cfgtrap)
  108. form.fields['trapname'].label = 'Trap name (in DB)'
  109. env['form'] = form
  110. return render(Request, 'traps/config_trapoid.html', env)
  111. def config_trapoid_new(Request):
  112. env = {}
  113. cfgtrap = CfgTrap()
  114. if Request.method == 'POST':
  115. form = CfgTrapNewForm(Request.POST, instance=cfgtrap)
  116. if form.is_valid():
  117. cfgtrap = form.save()
  118. if Request.POST.get('action') == 'save_update':
  119. with connection.cursor() as c:
  120. c.execute('UPDATE ' + Trap._meta.db_table + ' SET trapname=%s, category=%s, severity=%s WHERE trapoid=%s', [cfgtrap.trapname, cfgtrap.category, cfgtrap.severity, cfgtrap.trapoid,])
  121. return HttpResponseRedirect( reverse('trap_config_index') )
  122. else:
  123. form = CfgTrapNewForm(instance=cfgtrap)
  124. form.fields['trapname'].label = 'Trap name (in DB)'
  125. env['form'] = form
  126. return render(Request, 'traps/config_trapoid.html', env)
  127. def resolve_trapoid(Request, trapoid, db=False):
  128. env = {}
  129. env['trapoid'] = trapoid
  130. env['trapname'] = external_snmptranslate(trapoid)
  131. env['trapcount'] = Trap.objects.filter(trapoid=trapoid).count()
  132. if db:
  133. try:
  134. # FIXME: Mehrere, aktiv/inaktiv
  135. cfgtrap = CfgTrap.objects.get(trapoid=trapoid)
  136. except CfgTrap.DoesNotExist:
  137. cfgtrap = CfgTrap()
  138. cfgtrap.trapoid = trapoid
  139. cfgtrap.trapname = env['trapname']
  140. cfgtrap.save()
  141. with connection.cursor() as c:
  142. c.execute('UPDATE ' + Trap._meta.db_table + ' SET trapname=%s WHERE trapoid=%s', [env['trapname'], trapoid,])
  143. return HttpResponseRedirect( reverse('trap_index') + '?trapoid=%s' % trapoid )
  144. return render(Request, 'traps/resolv_trapoid.html', env)