blob: 54a09f0f021592be06b63130ce0d67d305f10ee2 [file] [log] [blame]
# -*- coding: utf-8 -*-
from django.shortcuts import render_to_response
from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.http import HttpResponse
from django.core.urlresolvers import reverse
from crashreports.models import Crashreport
from crashreports.forms import CrashreportForm
from django.views.decorators.csrf import csrf_exempt
from django.http import Http404
from django.contrib.auth.decorators import login_required
from django.db.models import Count
from rest_framework import viewsets
from serializers import CrashReportSerializer
from rest_framework.permissions import BasePermission
from rest_framework import filters
from rest_framework import generics
import django_filters
from django.template import loader
import datetime
import time
from ratelimit.decorators import ratelimit
@ratelimit( key='ip', rate='100/h')
@csrf_exempt
def index(request):
# Handle file upload`
if request.method == 'POST':
form = CrashreportForm(request.POST, request.FILES)
if form.is_valid():
new_cr = Crashreport(uuid=form.cleaned_data['uuid'],
aux_data=form.cleaned_data['aux_data'],
uptime=form.cleaned_data['uptime'],
boot_reason=form.cleaned_data['boot_reason'],
power_on_reason=form.cleaned_data['power_on_reason'],
power_off_reason=form.cleaned_data['power_off_reason'],
build_fingerprint=form.cleaned_data['build_fingerprint'],
date=form.cleaned_data['date'])
try:
new_cr.crashreport_file = request.FILES['crashreport']
except:
new_cr.crashreport_file = None
new_cr.save()
# Redirect to the document list after POST
return HttpResponse(status=204)
else:
return HttpResponse(status=400)
else:
return HttpResponse(status=400)
class IsCreationOrIsAuthenticated(BasePermission):
def has_permission(self, request, view):
if not request.user.is_authenticated():
if view.action == 'create':
return True
else:
return False
else:
return True
class ListFilter(django_filters.Filter):
def filter(self, qs, value):
value_list = value.split(u',')
return super(ListFilter, self).filter(qs, django_filters.fields.Lookup(value_list, 'in'))
class CrashreportFilter(filters.FilterSet):
start_date = django_filters.DateTimeFilter(name="date", lookup_expr='gte')
end_date = django_filters.DateTimeFilter(name="date", lookup_expr='lte')
boot_reason = ListFilter(name='boot_reason')
class Meta:
model = Crashreport
fields = ['build_fingerprint','boot_reason', 'power_on_reason', 'power_off_reason']
class CrashreportViewSet(viewsets.ModelViewSet):
queryset = Crashreport.objects.all()
serializer_class = CrashReportSerializer
permission_classes = [IsCreationOrIsAuthenticated]
filter_backends = (filters.DjangoFilterBackend,)
filter_class = CrashreportFilter