From f363bbcd2bf6c775e64f74fbdc8b803d3a7c619b Mon Sep 17 00:00:00 2001 From: Murali Nandigama Date: Wed, 28 Apr 2010 11:53:33 -0700 Subject: [PATCH] moved stand alone defs in models.py into TestFailure class and refactored views.py accordingly --- topfails/topfails/viewer/models.py | 71 ++++++++++++------------------ topfails/topfails/viewer/views.py | 8 ++-- 2 files changed, 32 insertions(+), 47 deletions(-) diff --git a/topfails/topfails/viewer/models.py b/topfails/topfails/viewer/models.py index db49527..e7a7e3c 100644 --- a/topfails/topfails/viewer/models.py +++ b/topfails/topfails/viewer/models.py @@ -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) diff --git a/topfails/topfails/viewer/views.py b/topfails/topfails/viewer/views.py index f8230c6..8c5d9d5 100644 --- a/topfails/topfails/viewer/views.py +++ b/topfails/topfails/viewer/views.py @@ -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))