update tko frontend code to link from 2nd level and sort tests.




git-svn-id: http://test.kernel.org/svn/autotest/trunk@670 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/tko/create_db b/tko/create_db
index b62a5f9..d789ea6 100644
--- a/tko/create_db
+++ b/tko/create_db
@@ -11,7 +11,7 @@
 -- main jobs table
 CREATE TABLE jobs (
 job_idx INTEGER PRIMARY KEY,		-- index number
-tag VARCHAR(30),			-- job key
+tag VARCHAR(100),			-- job key
 machine VARCHAR(80)			-- machine name
 );
 
diff --git a/tko/display.py b/tko/display.py
index 7339992..2bcaefd 100755
--- a/tko/display.py
+++ b/tko/display.py
@@ -1,4 +1,6 @@
 import os, re, parse, sys, db, frontend
+sys.path.insert(0, '/home/mbligh/autotest/client/bin')
+import kernel_versions
 
 db = db.db() # db.db(debug=True)
 
@@ -16,11 +18,16 @@
 	# print_colored_box(status_word, '\n'.join(lines))
 	link = 'machine_kernel_test.cgi?machine=%s&kernel=%s' % \
 					(machine, kernel.idx)
-	html = '<a href="%s">%s</a>' % (link, status_word)
+	if status_word:
+		html = '<a href="%s">%s</a>' % (link, status_word)
+	else:
+		html = None
 	print_colored_box(status_word, html)
 
 
 def print_colored_box(status, html):
+	if not html:
+		html = '&nbsp'
 	print "<td bgcolor=%s>" % frontend.status_colour[status]
 	print html
 	print "</td>"
@@ -35,11 +42,17 @@
 	print ""
 
 
+def kernel_encode(kernel):
+	return kernel_versions.version_encode(kernel.printable)
+
+
 def print_machine_vs_kernel(machines):
 	print '<table cellpadding=5 border=1 class="boldtable">'
 	print_machines_row(machines)
 
-	for kernel in frontend.kernel.select(db):
+	kernels = frontend.kernel.select(db)
+	kernels.sort(key = kernel_encode, reverse = True)
+	for kernel in kernels:
 		print "<tr>"
 		print "<td>%s</td>" % kernel.printable
 		for machine in machines:
@@ -51,17 +64,23 @@
 	print "</table>"
 
 
-def print_kernel_machines_vs_test(machines, kernel_idx):
+def print_kernel_machines_vs_test(machines, kernel_idx, html_root):
 	# first we have to get a list of all run tests across all machines
 	all_tests = {}
+	all_kernel = {}
 	results = {}
 	for machine in machines:
 		where = { 'kernel_idx' : kernel_idx , 'machine' : machine }
 		tests = frontend.test.select(db, where)
-		results[machine] = tests
+		test_dict = {}
 		for test in tests:
-			all_tests[test.subdir] = True
-	test_list = sorted(all_tests.keys())
+			if test.subdir.startswith('kernel.'):
+				all_kernel[test.subdir] = True
+			else:
+				all_tests[test.subdir] = True
+			test_dict[test.subdir] = test
+		results[machine] = test_dict
+	test_list = sorted(all_kernel.keys()) + sorted(all_tests.keys())
 
 	kernel = frontend.kernel.select(db, {'kernel_idx' : kernel_idx })[0]
 	print '<h1>%s</h1>' % kernel.printable
@@ -77,8 +96,10 @@
 	for machine in machines:
 		print "\n<tr>"
 		print "<td>%s</td>" % machine
-		tests = results[machine]
-		for test in tests:
-			print_colored_box(test.status_word, test.status_word)
+		for testname in test_list:
+			test = results[machine][testname]
+			html = '<a href="%s">%s</a>' % \
+						(test.url, test.status_word)
+			print_colored_box(test.status_word, html)
 		print "</tr>"
 	print '</table>'
diff --git a/tko/frontend.py b/tko/frontend.py
index 6130224..7996093 100755
--- a/tko/frontend.py
+++ b/tko/frontend.py
@@ -18,6 +18,8 @@
 	''		: '#ffffff', # white
 }
 
+html_root = 'http://test.kernel.org/google/'
+
 class kernel:
 	@classmethod
 	def select(klass, db, where = {}):
@@ -51,7 +53,7 @@
 	def __init__(self, db, test_idx, job_idx, testname, subdir, kernel_idx, status_num, reason, machine):
 		self.idx = test_idx
 		self.job = None 
-		# self.job = job.select(db, {'job_idx' : job_idx})
+		self.job = job(db, job_idx)
 		# self.machine = self.job.machine
 		self.test = testname
 		self.subdir = subdir
@@ -60,8 +62,17 @@
 		self.status_num = status_num
 		self.status_word = db.status_word[status_num]
 		self.reason = reason
+		self.url = html_root + self.job.tag + '/' + self.subdir
 		
- 
+
+class job:
+	def __init__(self, db, job_idx):
+		where = {'job_idx' : job_idx}
+		rows = db.select('tag, machine', 'jobs', where)
+		if not rows:
+			return None
+		(self.tag, self.machine) = rows[0]
+
  
 # class patch:
 # 	def __init__(self):
diff --git a/tko/machine_kernel_test.cgi b/tko/machine_kernel_test.cgi
index bc8b144..cff75bc 100755
--- a/tko/machine_kernel_test.cgi
+++ b/tko/machine_kernel_test.cgi
@@ -3,6 +3,7 @@
 import cgi, cgitb, os, sys
 
 tko = '/home/mbligh/autotest/tko'
+html_root = 'http://test.kernel.org/google/'
 
 cgitb.enable()
 
@@ -20,5 +21,5 @@
 machine = form["machine"].value
 kernel_version = form["kernel"].value
 
-print_kernel_machines_vs_test([machine], kernel_version)
+print_kernel_machines_vs_test([machine], kernel_version, html_root)