tko updates



git-svn-id: http://test.kernel.org/svn/autotest/trunk@661 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/tko/README b/tko/README
deleted file mode 100644
index af9aadc..0000000
--- a/tko/README
+++ /dev/null
@@ -1 +0,0 @@
-sqlite3 tko_db < create_db
diff --git a/tko/create_db b/tko/create_db
index bbff238..256c483 100644
--- a/tko/create_db
+++ b/tko/create_db
@@ -1,9 +1,9 @@
 BEGIN TRANSACTION;
 
 -- kernel versions
-CREATE TABLE kversions (
-kversion INTEGER PRIMARY KEY,
-kversion_hash VARCHAR(35),		-- Hash of base + all patches
+CREATE TABLE kernels (
+kernel_idx INTEGER PRIMARY KEY,
+kernel_hash VARCHAR(35),		-- Hash of base + all patches
 base VARCHAR(30),			-- Base version without patches
 printable VARCHAR(100)			-- Full version with patches
 );
@@ -17,7 +17,7 @@
 
 -- One entry per patch used, anywhere
 CREATE TABLE patches (
-kversion INTEGER,			-- index number
+kernel_idx INTEGER,			-- index number
 name VARCHAR(80),			-- short name
 url VARCHAR(300),			-- full URL
 hash VARCHAR(35)
@@ -29,7 +29,7 @@
 job_idx INTEGER,			-- ref to job table
 test VARCHAR(30),			-- name of test
 subdir VARCHAR(60),			-- subdirectory name
-kversion INTEGER,			-- kernel version test was AGAINST
+kernel_idx INTEGER,			-- kernel test was AGAINST
 status INTEGER,				-- test status
 reason VARCHAR(100)			-- reason for test status
 );
@@ -49,14 +49,6 @@
 value FLOAT				-- attribute value (eg 700.1)
 );
 
--- test performance results
-CREATE TABLE results (
-job_idx INTEGER,			-- ref to job table
-test VARCHAR(30),			-- name of test
-subdir VARCHAR(60) PRIMARY KEY,		-- subdirectory name
-kversion INTEGER			-- kernel version test was AGAINST
-);
-
 -- status key
 CREATE TABLE status (
 status INTEGER PRIMARY KEY,		-- numerical status
diff --git a/tko/db.py b/tko/db.py
index cd547e8..b6686cc 100644
--- a/tko/db.py
+++ b/tko/db.py
@@ -2,6 +2,8 @@
 
 class db:
 	def __init__(self):
+		if not os.path.exists('tko_db'):
+			os.system('sqlite tko_db < create_db')
 		self.con = sqlite.connect('tko_db')
 		self.cur = self.con.cursor()
 
@@ -54,9 +56,9 @@
 		self.insert('tests', data)
 
 
-	def lookup_kversion(self, kernel):
-		rows = self.select('kversion', 'kversions', 
-				{'kversion_hash':kernel.kversion_hash})
+	def lookup_kernel(self, kernel):
+		rows = self.select('kernel_idx', 'kernels', 
+				{'kernel_hash':kernel.kernel_hash})
 		if rows:
 			return rows[0][0]
 		else:
@@ -64,12 +66,14 @@
 
 
 	def insert_kernel_version(self, kernel):
-		kver = self.lookup_kversion(kernel)
+		kver = self.lookup_kernel(kernel)
 		if kver:
 			return kver
-		self.insert('kversions', {'base':kernel.base,
-					  'kversion_hash':kernel.kversion_hash})
-		kver = self.lookup_kversion(kernel)
+		self.insert('kernels', {'base':kernel.base,
+					  'kernel_hash':kernel.kernel_hash,
+					  'printable':kernel.base})
+		# WARNING - incorrectly shoving base into printable here.
+		kver = self.lookup_kernel(kernel)
 		for patch in kernel.patches:
 			self.insert_patch(kver, patch)
 		return kver
@@ -78,7 +82,7 @@
 	def insert_patch(self, kver, patch):
 		print patch.reference
 		name = os.path.basename(patch.reference)[:80]
-		self.insert('patches', {'kversion': kver, 
+		self.insert('patches', {'kernel_idx': kver, 
 					'name':name,
 					'url':patch.reference, 
 					'hash':patch.hash})
diff --git a/tko/frontend.py b/tko/frontend.py
new file mode 100755
index 0000000..a7bedbb
--- /dev/null
+++ b/tko/frontend.py
@@ -0,0 +1,51 @@
+#!/usr/bin/python
+import os, re, db
+
+statuses = ['NOSTATUS', 'ERROR', 'ABORT', 'FAIL', 'WARN', 'GOOD']
+status_num = {}
+for x in range(0, len(statuses)):
+	status_num[statuses[x]] = x
+
+
+class job:
+	def __init__(self):
+		self.idx = None
+		self.tag = None
+		self.machine = None
+		self.tests = []
+
+
+class kernel:
+	fields = ['kernel_idx', 'kernel_hash', 'base', 'printable']
+
+	def __init__(self, db, where):
+		self.db = db
+		self.base = None
+		self.patches = []
+
+		db.select(fields, kernels, 
+
+		
+class patch:
+	def __init__(self):
+		self.spec = spec
+		self.reference = reference
+		self.hash = hash
+
+
+class test:
+	def __init__(self, dir, status, reason, kernel):
+		self.dir = dir
+		self.status = status
+		self.reason = reason
+		self.keyval = os.path.join(dir, 'results/keyval')
+		self.iterations = []
+		self.testname = re.sub(r'\..*', '', self.dir)
+		self.kernel = kernel
+
+
+class iteration:
+	def __init__(self, index, lines):
+		self.index = index
+		self.keyval = {}
+
diff --git a/tko/machine_kernel b/tko/machine_kernel
new file mode 100755
index 0000000..2b47047
--- /dev/null
+++ b/tko/machine_kernel
@@ -0,0 +1,59 @@
+#!/usr/bin/python
+import os, re, parse, sys
+
+db = db.db()
+
+machines = sys.argv[1:]
+kernels = select (kernel, printable) from kernels
+
+def print_machines_row(machines):
+	print "<tr>"
+	print "<th>Version</th>"
+	for machine in machines:
+		print "<th>%s</th>" % machine
+	print "</tr>"
+	print ""
+
+
+def print_kernel_machine(kernel_idx, machine):
+	status = None
+	tests = 'select * from tests where kernel = key'
+	# (test_idx, job_idx, test, subdir, status, reason) = test
+	for test in tests:
+		if not status or test.status < status:
+			status = test.status
+	html = ''
+	for test in tests:
+		html .= '%s %s' % (subdir, status)
+
+
+status_colour = {
+	'GOOD'  : '#66ff66', # green
+	'WARN'  : '#fffc00', # yellow
+	'FAIL'  : '#fff666', # red
+	'ABORT' : '#ff6666', # red
+}
+
+def print_colored_box(status, html):
+	print "<td bgcolor=%s>" % status ? status_colour[status] : '#ffffff'
+	print html
+	print "</td>"
+
+
+print '<table cellpadding=5 border=1 class="boldtable">'
+print_machines_row()
+
+for (kernel_idx, printable) in kernels:
+	print "<tr>"
+	print "<td>%s</td>" % printable
+	for machine in machines:
+		print_kernel_machine(kernel_idx, machine)
+	print "</tr>"
+	print ""
+
+print_machines_row()
+print "</table>"
+
+
+
+
diff --git a/tko/parse.py b/tko/parse.py
index d3a5894..1ca6524 100755
--- a/tko/parse.py
+++ b/tko/parse.py
@@ -70,7 +70,7 @@
 				print words
 				self.patches.append(patch(*words[0:]))
 				# patch_hashes.append(words[2])
-		self.kversion_hash = self.get_kver_hash(self.base, patch_hashes)
+		self.kernel_hash = self.get_kver_hash(self.base, patch_hashes)
 
 
 	def get_kver_hash(self, base, patch_hashes):