Skip to content
Snippets Groups Projects
Select Git revision
  • e34bbe99366d781fc01b7b17362384e067f99e97
  • test default protected
  • master protected
  • original
  • pirati-backup protected
  • beta-2
  • beta-1
  • v3.1.4
  • v3.1.3
  • v3.1.2
  • v3.1.1
  • v3.1.0
  • v3.0.16
  • v3.0.15
  • v3.0.14
  • v3.0.13
  • v3.0.12
  • v3.0.11
  • v3.0.10
  • v3.0.9
  • v3.0.8
  • v3.0.7
  • v3.0.6
  • v3.0.5
  • v3.0.4
25 results

stats_views.py

Blame
  • stats_views.py 2.58 KiB
    """
    Helios stats views
    """
    
    from django.core.urlresolvers import reverse
    from django.core.mail import send_mail
    from django.core.paginator import Paginator
    from django.http import *
    from django.db import transaction
    from django.db.models import *
    
    from security import *
    from auth.security import get_user, save_in_session_across_logouts
    from view_utils import *
    
    from helios import tasks
    
    def require_admin(request):
      user = get_user(request)
      if not user or not user.admin_p:
        raise PermissionDenied()
    
      return user
    
    def home(request):
      user = require_admin(request)
      num_votes_in_queue = CastVote.objects.filter(invalidated_at=None, verified_at=None).count()
      return render_template(request, 'stats', {'num_votes_in_queue': num_votes_in_queue})
    
    def force_queue(request):
      user = require_admin(request)
      votes_in_queue = CastVote.objects.filter(invalidated_at=None, verified_at=None)
      for cv in votes_in_queue:
        tasks.cast_vote_verify_and_store.delay(cv.id)
    
      return HttpResponseRedirect(reverse(home))
    
    def elections(request):
      user = require_admin(request)
    
      page = int(request.GET.get('page', 1))
      limit = int(request.GET.get('limit', 25))
    
      elections = Election.objects.all().order_by('-created_at')
      elections_paginator = Paginator(elections, limit)
      elections_page = elections_paginator.page(page)
    
      return render_template(request, "stats_elections", {'elections' : elections_page.object_list, 'elections_page': elections_page,
                                                          'limit' : limit})
        
    def recent_votes(request):
      user = require_admin(request)
      
      # elections with a vote in the last 24 hours, ordered by most recent cast vote time
      # also annotated with number of votes cast in last 24 hours
      elections_with_votes_in_24hours = Election.objects.filter(voter__castvote__cast_at__gt= datetime.datetime.utcnow() - datetime.timedelta(days=1)).annotate(last_cast_vote = Max('voter__castvote__cast_at'), num_recent_cast_votes = Count('voter__castvote')).order_by('-last_cast_vote')
    
      return render_template(request, "stats_recent_votes", {'elections' : elections_with_votes_in_24hours})
    
    def recent_problem_elections(request):
      user = require_admin(request)
    
      # elections left unfrozen older than 1 day old (and younger than 10 days old, so we don't go back too far)
      elections_with_problems = Election.objects.filter(frozen_at = None, created_at__gt = datetime.datetime.utcnow() - datetime.timedelta(days=10), created_at__lt = datetime.datetime.utcnow() - datetime.timedelta(days=1) )
    
      return render_template(request, "stats_problem_elections", {'elections' : elections_with_problems})