blob: 1b1c7ed1b4c80a4ae55524713b83d96339f3e15e [file] [log] [blame]
from google.appengine.dist import use_library
use_library('django', '1.2')
import logging
import os
import time
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from google.appengine.ext.webapp.util import run_wsgi_app
import base_view
import settings
import utils
from dash_db import Board, Build, Job
def BvtSummaryTable(board, limit):
tbl_name = board.name
header_name = 'Test End'
tbl_header = [utils.Render('col_header.html', locals())]
job_query = Job.all()
job_query.filter('board = ', board.name)
job_query.filter('job_name = ', 'bvt')
job_query.order('-job_finished_time')
results = job_query.fetch(limit*2)
netbooks = set()
job_dict = {}
for job in results:
netbooks.add(job.netbook)
row = job_dict.setdefault(job.build, {})
row[job.netbook] = job
netbooks = list(netbooks)
netbooks.sort()
if netbooks:
for netbook_name in netbooks:
tbl_header.append(utils.Render('summary_table_col_header.html', locals()))
else:
return
tbl_rows = []
for build_name in board.builds[:limit]:
finished_time = 0
cells = []
for netbook_name in netbooks:
job = job_dict.get(build_name, {}).get(netbook_name, None)
test_status = 'None'
test_link = ''
bg_color = settings.COLOR_GRAY
if job:
finished_time = max(finished_time, job.job_finished_time)
if job.completed:
test_status = '%s/%s' % (job.passed, job.total)
test_link = '/board?board=%s&netbook=%s' % (board.name, netbook_name)
if job.total and job.total == job.passed:
bg_color = settings.COLOR_GREEN
else:
bg_color = settings.COLOR_RED
if job.aborted:
bg_color = settings.COLOR_ORANGE
elif job.aborted:
test_status = 'Aborted'
test_link = 'http://cautotest/afe/#tab_id=view_job&object_id=%d' % job.id
bg_color = settings.COLOR_ORANGE
else:
test_status = 'Testing'
# job link should be to cautotest job page.
test_link = 'http://cautotest/afe/#tab_id=view_job&object_id=%d' % job.id
cells.append((test_status, test_link, '', bg_color))
if finished_time:
finished_time = time.strftime('%a %m/%d %H:%M',
time.localtime(finished_time - settings.TIMEZONE_OFFSET))
else:
finished_time = 'Unknown'
cells.insert(0, (finished_time, '', '', settings.COLOR_GRAY))
build = Build.get(board.name, build_name)
started_time, finished_time, build_time = utils.FormatBuildTime(build)
chrome_version = build.get_chrome_version()
build_link = 'build?board=%s&build=%s' % (board.name, build_name)
build_popup = utils.Render('build_popup.html', locals())
tbl_rows.append((build_name, build_link, build_popup, cells))
if tbl_header and tbl_rows:
return utils.Render('table.html', locals())
class LandingView(base_view.BaseView):
def get(self):
self.header()
board_names = self.request.get('boards',
settings.DEFAULT_BOARD_ORDER).split(',')
limit = int(self.request.get('limit', settings.DEFAULT_TABLE_ROWS))
for board_name in board_names:
board = Board.get(board_name)
if board:
table = BvtSummaryTable(board, limit)
if table:
self.response.out.write('<div style="clear:none;float:left;padding-right:30px;">')
self.response.out.write(table)
self.response.out.write('</div>')
self.timing()
return
application = webapp.WSGIApplication([('/', LandingView),
],
debug=False)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()