moved stand alone defs in models.py into TestFailure class and refactored views.py accordingly

This commit is contained in:
2010-04-28 11:53:33 -07:00
parent 57493e52b6
commit f363bbcd2b
2 changed files with 32 additions and 47 deletions

View File

@@ -82,49 +82,34 @@ class TestFailure(models.Model):
build = models.ForeignKey(Build)
test = models.ForeignKey(Test)
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
def get_fails_in_timerange(self,tree):
# Get current time, in seconds.
endtime = int(time())
#print endtime
m = re.match("(\d+)([ymwdh])", self)
#print m.group(1), m.group(2)
if m is None:
print >>sys.stderr, "ERROR: bad timespan = '%s'!" % options.timespan
sys.exit(1)
timespan = int(m.group(1)) * {'y': 365 * 24 * 3600,
'm': 30 * 24 * 3600,
'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 = get_time_failing_tests(tree)
return qs.filter(build__starttime__gt=curtime)
@classmethod
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]
@classmethod
def get_time_failing_tests(cls,tree):
return cls.objects.filter(build__tree__name=tree).values('test__name').annotate(count=models.Count('test__name')).order_by('-count')
@classmethod
def get_fails_in_timerange(cls,period,tree):
# Get current time, in seconds.
endtime = int(time())
m = re.match("(\d+)([ymwdh])", period)
if m is None:
print >>sys.stderr, "ERROR: bad timespan = '%s'!" % options.timespan
sys.exit(1)
timespan = int(m.group(1)) * {'y': 365 * 24 * 3600,
'm': 30 * 24 * 3600,
'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)

View File

@@ -1,5 +1,5 @@
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
from django.http import HttpResponse
import json
@@ -7,7 +7,7 @@ import json
def latest(request,tree='Firefox'):
failures = get_list_or_404(TestFailure.objects.filter(build__tree__name=tree).order_by('-build__starttime')[:20])
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))
else:
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})
def topfails(request,tree='Firefox'):
failures = get_most_failing_tests(tree)
failures = TestFailure.get_most_failing_tests(tree)
if request.GET.has_key('json'):
jtext = list(failures)
return HttpResponse(json.dumps(jtext))
@@ -84,7 +84,7 @@ def timeline(request,tree='Firefox'):
def failswindow(request,tree='Firefox'):
period=request.GET['window']
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'):
jtext = list(failures)
return HttpResponse(json.dumps(jtext))