# This is an auto-generated Django model module. # You'll have to do the following manually to clean this up: # * Rearrange models' order # * Make sure each model has one field with primary_key=True # Feel free to rename the models, but don't rename db_table values or field names. # # Also note: You'll have to insert the output of 'django-admin.py sqlcustom [appname]' # into your database. import re from django.db import models, connection from datetime import datetime from time import ctime, sleep, time class OS(): Windows = 0 Mac = 1 Linux = 2 Unknown = 3 OS_CHOICES = ( (OS.Windows, 'Windows'), (OS.Mac, 'Mac'), (OS.Linux, 'Linux'), (OS.Unknown, 'Unknown') ) class BuildStatus(): Success = 0 TestFailed = 1 Burning = 2 Exception = 3 Unknown = 4 BUILDSTATUS_CHOICES = ( (BuildStatus.Success, 'Success'), (BuildStatus.TestFailed, 'Test Failed'), (BuildStatus.Burning, 'Burning'), (BuildStatus.Exception, 'Exception'), (BuildStatus.Unknown, 'Unknown') ) class Trees(models.Model): id = models.IntegerField(primary_key=True) name = models.TextField(blank=True) def __unicode__(self): return self.name class Meta: db_table = 'trees' class Builds(models.Model): id = models.IntegerField(primary_key=True) tree = models.ForeignKey(Trees, db_column="treeid") os = models.IntegerField(choices=OS_CHOICES) starttime = models.IntegerField(null=True, blank=True) status = models.IntegerField(choices=BUILDSTATUS_CHOICES) logfile = models.TextField(blank=True) changeset = models.TextField(blank=True) def startdate(self): return datetime.fromtimestamp(self.starttime) def changeset_link(self): return '%s' % ("http://hg.mozilla.org/mozilla-central", self.changeset, self.changeset) def tinderbox_link(self): if self.logfile: return "http://tinderbox.mozilla.org/showlog.cgi?log=%s/%s" % (self.tree.name, self.logfile) return "http://tinderbox.mozilla.org/showbuilds.cgi?tree=%s&maxdate=%d&hours=3" % (self.tree.name, self.starttime) class Meta: db_table = 'builds' class Tests(models.Model): id = models.IntegerField(primary_key=True) build = models.ForeignKey(Builds, db_column="buildid") name = models.TextField(blank=True) description = models.TextField(blank=True) class Meta: db_table = 'tests' def get_most_failing_tests(): cursor = connection.cursor() cursor.execute("select count(*), name from (select builds.id, name from builds inner join tests on builds.id = tests.buildid group by builds.id, name) aaa group by name order by count(*) desc limit 25") for row in cursor: yield row def get_fails_in_timerange(self): # 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 #print curtime, timespan, endtime-curtime cursor = connection.cursor() statement = "select count(*), name from (select builds.id, name from builds inner join tests on builds.id = tests.buildid where builds.starttime >"+str(curtime)+" group by builds.id, name) aaa group by name order by count(*) DESC" cursor.execute(statement) for row in cursor: print row yield row