123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- # -*- encoding: utf-8 -*-
- from django.core.urlresolvers import reverse
- from django.db import connection
- from django.http import HttpResponse, HttpResponseRedirect
- from django.shortcuts import render
- from mymontools.paginate import paginate
- from .models import *
- from .forms import *
- from .tools import get_filtered_traps_for_querydict, get_filtered_cfgtraps_for_querydict
- from .translate import *
- import json
- from pprint import pprint
- ##############################################################################
- def trap_index(Request):
- env = {}
- page = Request.GET.get('page')
- pprint( Request.GET )
- traps = get_filtered_traps_for_querydict(Request.GET)
- env['traps'] = paginate(traps, page, 50)
- env['trapcount'] = traps.count()
- tsf = TrapSimpleFilter(Request.GET)
- tsf.fields['hostname'].choices = [ (x, x) for x in Trap.objects.exclude(hostname='').values_list('hostname', flat=True).order_by('hostname').distinct() ]
- tsf.fields['trapoid'].choices = [ (oid, trapname or oid) for oid, trapname in Trap.objects.exclude(trapoid='').values_list('trapoid','trapname').order_by('trapname').distinct() ]
- tsf.fields['severity'].choices = [ (x, x) for x in Trap.objects.exclude(severity='').values_list('severity', flat=True).order_by('severity').distinct() ] + [ ('__', '<EMPTY>'), ]
- tsf.fields['category'].choices = [ (x, x) for x in Trap.objects.exclude(category='').values_list('category', flat=True).order_by('category').distinct() ] + [ ('__', '<EMPTY>'), ]
- tsf.fields['trapread'].choices = [ ('False', 'Unread'), ('True', 'Read') ]
- env['trapfilter'] = tsf
- tse = TrapSimpleExclude(Request.GET)
- for field in tsf.fields.keys():
- tse.fields[u'exclude_%s' % field].choices = tsf.fields[field].choices
- env['trapexclude'] = tse
- env['stats_traps_wo_trapname'] = Trap.objects.filter(trapname='').count()
- env['stats_traps_wo_category'] = Trap.objects.filter(category='').count()
- env['stats_traps_wo_severity'] = Trap.objects.filter(severity='').count()
- env['stats_cfgtraps_wo_category'] = CfgTrap.objects.filter(category='').count()
- env['stats_cfgtraps_wo_severity'] = CfgTrap.objects.filter(severity='').count()
- return render(Request, 'traps/trap_index.html', env)
- def trap_modify(Request):
- action = Request.POST.get('action') or Request.GET.get('action')
- trapID = Request.GET.get('trapID')
- trapIDs= Request.POST.getlist('trapIDs')
- # FIXME:#45 'archive']:
- if not action in ['read', 'delete', ]:
- return HttpResponse(u'Action "%s" not implemented' % action )
- if trapID:
- trapIDs.append(trapID)
- if action == 'read':
- Trap.objects.filter(id__in=trapIDs).update(trapread=True)
- elif action == 'delete':
- Trap.objects.filter(id__in=trapIDs).delete()
- params = Request.GET.copy()
- if 'action' in params:
- params.pop('action')
- if trapID in params:
- params.pop('trapID')
- return HttpResponseRedirect( reverse('trap_index') + '?%s' % params.urlencode() )
- def config_index(Request):
- env = {}
- page = Request.GET.get('page')
- cfgtraps = get_filtered_cfgtraps_for_querydict(Request.GET)
- env['cfgtraps'] = paginate(cfgtraps, page, 50)
- env['cfgtrapcount'] = cfgtraps.count()
- ctsf = CfgTrapSimpleFilter(Request.GET)
- ctsf.fields['severity'].choices = [ (x, x) for x in CfgTrap.objects.exclude(severity='').values_list('severity', flat=True).order_by('severity').distinct() ] + [ ('__', '<EMPTY>'), ]
- ctsf.fields['category'].choices = [ (x, x) for x in CfgTrap.objects.exclude(category='').values_list('category', flat=True).order_by('category').distinct() ] + [ ('__', '<EMPTY>'), ]
- env['cfgtrapfilter'] = ctsf
- ctse = CfgTrapSimpleExclude(Request.GET)
- for field in ctsf.fields.keys():
- ctse.fields[u'exclude_%s' % field].choices = ctsf.fields[field].choices
- env['cfgtrapexclude'] = ctse
- env['stats_cfgtraps_wo_category'] = CfgTrap.objects.filter(category='').count()
- env['stats_cfgtraps_wo_severity'] = CfgTrap.objects.filter(severity='').count()
- return render(Request, 'traps/trap_config_index.html', env)
- def config_export(Request):
- action = Request.POST.get('action') or Request.GET.get('action')
- cfgtrapID = Request.GET.get('cfgtrapID')
- cfgtrapIDs= Request.POST.getlist('cfgtrapIDs')
- if not action in ['export-json', ]:
- return HttpResponse(u'Action "%s" not implemented' % action )
- if cfgtrapID:
- cfgtrapIDs.append(cfgtrapID)
- export_list = []
- for cfgtrap in CfgTrap.objects.filter(id__in=cfgtrapIDs):
- export_obj = {}
- for fieldname in cfgtrap.export_fields:
- export_obj[fieldname] = getattr(cfgtrap, fieldname)
- export_list.append(export_obj)
- export_js = json.dumps(export_list)
- return HttpResponse(export_js, content_type='application/json')
- def config_trapoid(Request, trapoid):
- env = {}
- try:
- # FIXME:#56 Mehrere, aktiv/inaktiv
- cfgtrap = CfgTrap.objects.get(trapoid=trapoid)
- except CfgTrap.DoesNotExist:
- cfgtrap = CfgTrap(trapoid=trapoid)
- env['snmptranslate_trapoid'] = external_snmptranslate(trapoid)
- if Request.method == 'POST':
- form = CfgTrapForm(Request.POST, instance=cfgtrap)
- if form.is_valid():
- cfgtrap = form.save()
- if Request.POST.get('action') == 'save_update':
- with connection.cursor() as c:
- c.execute('UPDATE ' + Trap._meta.db_table + ' SET trapname=%s, category=%s, severity=%s WHERE trapoid=%s', [cfgtrap.trapname, cfgtrap.category, cfgtrap.severity, trapoid,])
- return HttpResponseRedirect( reverse('trap_config_index') )
- else:
- form = CfgTrapForm(instance=cfgtrap)
- form.fields['trapname'].label = 'Trap name (in DB)'
- env['form'] = form
- return render(Request, 'traps/config_trapoid.html', env)
- def resolve_trapoid(Request, trapoid, db=False):
- env = {}
- env['trapoid'] = trapoid
- env['trapname'] = external_snmptranslate(trapoid)
- env['trapcount'] = Trap.objects.filter(trapoid=trapoid).count()
- if db:
- try:
- # FIXME: Mehrere, aktiv/inaktiv
- cfgtrap = CfgTrap.objects.get(trapoid=trapoid)
- except CfgTrap.DoesNotExist:
- cfgtrap = CfgTrap()
- cfgtrap.trapoid = trapoid
- cfgtrap.trapname = env['trapname']
- cfgtrap.save()
- with connection.cursor() as c:
- c.execute('UPDATE ' + Trap._meta.db_table + ' SET trapname=%s WHERE trapoid=%s', [env['trapname'], trapoid,])
- return HttpResponseRedirect( reverse('trap_index') + '?trapoid=%s' % trapoid )
- return render(Request, 'traps/resolv_trapoid.html', env)
|