moved stand alone defs in models.py into TestFailure class and refactored views.py accordingly
This commit is contained in:
@@ -82,49 +82,34 @@ class TestFailure(models.Model):
|
|||||||
build = models.ForeignKey(Build)
|
build = models.ForeignKey(Build)
|
||||||
test = models.ForeignKey(Test)
|
test = models.ForeignKey(Test)
|
||||||
failtext = models.CharField(max_length=400, blank=True)
|
failtext = models.CharField(max_length=400, blank=True)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def get_most_failing_tests(tree):
|
|
||||||
return TestFailure.objects.filter(build__tree__name=tree).values('test__name').annotate(count=models.Count('test__name')).order_by('-count')[:25]
|
|
||||||
|
|
||||||
def get_time_failing_tests(tree):
|
|
||||||
return TestFailure.objects.filter(build__tree__name=tree).values('test__name').annotate(count=models.Count('test__name')).order_by('-count')
|
|
||||||
|
|
||||||
#This def is never used not intended to be used. I kept it here as a refresher
|
|
||||||
def get_latest_fails(tree):
|
|
||||||
cursor = connection.cursor()
|
|
||||||
statement="""SELECT viewer_testfailure.id, viewer_testfailure.build_id, viewer_test.name, viewer_testfailure.failtext
|
|
||||||
FROM viewer_testfailure, viewer_test, viewer_build, viewer_tree
|
|
||||||
WHERE (viewer_testfailure.build_id = viewer_build.id)
|
|
||||||
AND (viewer_build.tree_id = viewer_tree.id)
|
|
||||||
AND ( viewer_testfailure.test_id = viewer_test.id)
|
|
||||||
AND viewer_tree.name ='"""+tree+"""' ORDER BY viewer_build.starttime DESC LIMIT 20"""
|
|
||||||
cursor.execute(statement)
|
|
||||||
for row in cursor:
|
|
||||||
yield row
|
|
||||||
|
|
||||||
|
@classmethod
|
||||||
def get_fails_in_timerange(self,tree):
|
def get_most_failing_tests(cls,tree):
|
||||||
|
return cls.objects.filter(build__tree__name=tree).values('test__name').annotate(count=models.Count('test__name')).order_by('-count')[:25]
|
||||||
# Get current time, in seconds.
|
|
||||||
endtime = int(time())
|
@classmethod
|
||||||
|
def get_time_failing_tests(cls,tree):
|
||||||
#print endtime
|
return cls.objects.filter(build__tree__name=tree).values('test__name').annotate(count=models.Count('test__name')).order_by('-count')
|
||||||
m = re.match("(\d+)([ymwdh])", self)
|
|
||||||
#print m.group(1), m.group(2)
|
@classmethod
|
||||||
if m is None:
|
def get_fails_in_timerange(cls,period,tree):
|
||||||
print >>sys.stderr, "ERROR: bad timespan = '%s'!" % options.timespan
|
|
||||||
sys.exit(1)
|
# Get current time, in seconds.
|
||||||
|
endtime = int(time())
|
||||||
timespan = int(m.group(1)) * {'y': 365 * 24 * 3600,
|
|
||||||
'm': 30 * 24 * 3600,
|
m = re.match("(\d+)([ymwdh])", period)
|
||||||
'w': 7 * 24 * 3600,
|
if m is None:
|
||||||
'd': 24 * 3600,
|
print >>sys.stderr, "ERROR: bad timespan = '%s'!" % options.timespan
|
||||||
'h': 3600}[m.group(2)]
|
sys.exit(1)
|
||||||
# Set current time to beginning of requested timespan ending now.
|
|
||||||
curtime = endtime - timespan
|
timespan = int(m.group(1)) * {'y': 365 * 24 * 3600,
|
||||||
qs = get_time_failing_tests(tree)
|
'm': 30 * 24 * 3600,
|
||||||
return qs.filter(build__starttime__gt=curtime)
|
'w': 7 * 24 * 3600,
|
||||||
|
'd': 24 * 3600,
|
||||||
|
'h': 3600}[m.group(2)]
|
||||||
|
# Set current time to beginning of requested timespan ending now.
|
||||||
|
curtime = endtime - timespan
|
||||||
|
qs = cls.get_time_failing_tests(tree)
|
||||||
|
return qs.filter(build__starttime__gt=curtime)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
from django.shortcuts import render_to_response, get_list_or_404
|
from django.shortcuts import render_to_response, get_list_or_404
|
||||||
from topfails.viewer.models import Build, Tree, Test,TestFailure, OS_CHOICES, get_most_failing_tests, get_fails_in_timerange
|
from topfails.viewer.models import Build, Tree, Test,TestFailure, OS_CHOICES
|
||||||
import re
|
import re
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
import json
|
import json
|
||||||
@@ -7,7 +7,7 @@ import json
|
|||||||
def latest(request,tree='Firefox'):
|
def latest(request,tree='Firefox'):
|
||||||
failures = get_list_or_404(TestFailure.objects.filter(build__tree__name=tree).order_by('-build__starttime')[:20])
|
failures = get_list_or_404(TestFailure.objects.filter(build__tree__name=tree).order_by('-build__starttime')[:20])
|
||||||
if request.GET.has_key('json'):
|
if request.GET.has_key('json'):
|
||||||
jtext = [{"Test_name":f.test.name, "Build_status":f.build.status, "Logfile": f.build.tinderboxlink(),"Changeset":f.build.jsonchangesetlink() , "Failure_description":f.failtext} for f in failures]
|
jtext = [{"testname":f.test.name, "buildstatus":f.build.status, "logfile": f.build.tinderboxlink(),"changeset":f.build.jsonchangesetlink() , "failtext":f.failtext} for f in failures]
|
||||||
return HttpResponse(json.dumps(jtext))
|
return HttpResponse(json.dumps(jtext))
|
||||||
else:
|
else:
|
||||||
return render_to_response('viewer/latest.html', {'failures': failures, 'tree' : tree})
|
return render_to_response('viewer/latest.html', {'failures': failures, 'tree' : tree})
|
||||||
@@ -50,7 +50,7 @@ def test(request,tree='Firefox'):
|
|||||||
return render_to_response('viewer/test.html', {'test': request.GET['name'], 'failures': failures, 'tree' : tree})
|
return render_to_response('viewer/test.html', {'test': request.GET['name'], 'failures': failures, 'tree' : tree})
|
||||||
|
|
||||||
def topfails(request,tree='Firefox'):
|
def topfails(request,tree='Firefox'):
|
||||||
failures = get_most_failing_tests(tree)
|
failures = TestFailure.get_most_failing_tests(tree)
|
||||||
if request.GET.has_key('json'):
|
if request.GET.has_key('json'):
|
||||||
jtext = list(failures)
|
jtext = list(failures)
|
||||||
return HttpResponse(json.dumps(jtext))
|
return HttpResponse(json.dumps(jtext))
|
||||||
@@ -84,7 +84,7 @@ def timeline(request,tree='Firefox'):
|
|||||||
def failswindow(request,tree='Firefox'):
|
def failswindow(request,tree='Firefox'):
|
||||||
period=request.GET['window']
|
period=request.GET['window']
|
||||||
m = re.match("(\d+)([ymwdh])", period)
|
m = re.match("(\d+)([ymwdh])", period)
|
||||||
failures = get_fails_in_timerange(period,tree)
|
failures = TestFailure.get_fails_in_timerange(period,tree)
|
||||||
if request.GET.has_key('json'):
|
if request.GET.has_key('json'):
|
||||||
jtext = list(failures)
|
jtext = list(failures)
|
||||||
return HttpResponse(json.dumps(jtext))
|
return HttpResponse(json.dumps(jtext))
|
||||||
|
|||||||
Reference in New Issue
Block a user