# -*- 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() ] + [ ('__', ''), ] tsf.fields['category'].choices = [ (x, x) for x in Trap.objects.exclude(category='').values_list('category', flat=True).order_by('category').distinct() ] + [ ('__', ''), ] 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() ] + [ ('__', ''), ] ctsf.fields['category'].choices = [ (x, x) for x in CfgTrap.objects.exclude(category='').values_list('category', flat=True).order_by('category').distinct() ] + [ ('__', ''), ] 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)