# -*- encoding: utf-8 -*- from django.core.urlresolvers import reverse from django.db import connection from django.db.models import Q from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import render from mymontools.paginate import paginate from states.models import * from states.forms import * from .tools import * from pprint import pprint # paginate # get_filtered_states_for_querydict # get_filtered_cfgstates_for_querydict ############################################################################## def state_index(Request): env = {} page = Request.GET.get('page') states = get_filtered_states_for_querydict(Request.GET) print states env['states'] = paginate(states, page, 30) env['statecount'] = states.count() ssf = StateSimpleFilter(Request.GET) ssf.fields['hostname'].choices = [ (x, x) for x in State.objects.exclude(hostname='').values_list('hostname', flat=True).order_by('hostname').distinct() ] ssf.fields['state'].choices = [ (sid, sname) for sid, sname in State.objects.values_list('state', 'state__name').order_by('state__name').distinct() ] ssf.fields['start_time'].choices = [ ('_NULL_', ''), ] ssf.fields['stop_time'].choices = [ ('_NULL_', ''), ] ssf.fields['read'].choices = [ ('False', 'Unread'), ('True', 'Read') ] env['statefilter'] = ssf sse = StateSimpleExclude(Request.GET) for field in ssf.fields.keys(): sse.fields[u'exclude_%s' % field].choices = ssf.fields[field].choices env['stateexclude'] = sse env['stats_states_active'] = State.objects.filter(stop_time__isnull=True).count() env['stats_states_finished'] = State.objects.filter(start_time__isnull=False, stop_time__isnull=False).count() env['stats_states_weired'] = State.objects.filter( Q(start_time__isnull=True, stop_time__isnull=False) | Q(start_time__isnull=True, stop_time__isnull=True)).count() return render(Request, 'states/state_index.html', env) def state_config_index(Request): env = {} page = Request.GET.get('page') # FIXME: Filterbar machen? #cfgstates = get_filtered_cfgtraps_for_querydict(Request.GET) cfgstates = CfgState.objects.all() env['cfgstates'] = paginate(cfgstates, page, 50) env['cfgstatecount'] = cfgstates.count() return render(Request, 'states/state_config_index.html', env) def state_config_state(Request, stateid): 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(): form.save() 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, 'states/config_state.html', env) def state_modify(Request): action = Request.POST.get('action') or Request.GET.get('action') stateID = Request.GET.get('stateID') stateIDs= Request.POST.getlist('stateIDs') # FIXME:#46 'archive']: if not action in ['read', 'delete', ]: return HttpResponse(u'Action "%s" not implemented' % action ) if stateID: stateIDs.append(stateID) if action == 'read': State.objects.filter(id__in=stateIDs).update(read=True) elif action == 'delete': State.objects.filter(id__in=stateIDs).delete() params = Request.GET.copy() if 'action' in params: params.pop('action') if stateID in params: params.pop('stateID') return HttpResponseRedirect( reverse('state_index') + '?%s' % params.urlencode() )