Continuously reparse the status logs whenever new logs are written out
on the server.

Signed-off-by: John Admanski <jadmanski@google.com>



git-svn-id: http://test.kernel.org/svn/autotest/trunk@1298 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/scheduler/monitor_db b/scheduler/monitor_db
index 39e070c..d88ebeb 100755
--- a/scheduler/monitor_db
+++ b/scheduler/monitor_db
@@ -199,12 +199,17 @@
 				self.connect()
 
 
+def generate_parse_command(results_dir, flags=""):
+	parse = os.path.abspath(os.path.join(AUTOTEST_TKO_DIR, 'parse'))
+	output = os.path.abspath(os.path.join(results_dir, '.parse.log'))
+	cmd = "%s %s -r -o %s > %s 2>&1 &"
+	return cmd % (parse, flags, results_dir, output)
+
+
 def parse_results(results_dir, flags=""):
 	if _testing_mode:
 		return
-	parse = os.path.join(AUTOTEST_TKO_DIR, 'parse')
-	output = os.path.join(results_dir, '.parse.log')
-	os.system("%s %s -r -o %s > %s 2>&1 &" % (parse, flags, results_dir, output))
+	os.system(generate_parse_command(results_dir, flags))
 
 
 def log_stacktrace(reason):
@@ -686,6 +691,21 @@
 
 
 	def prolog(self):
+		# write the parser commands into the results directories
+		if self.job.is_synchronous() or self.job.num_machines()==1:
+			results_dir = self.job.results_dir()
+			cmdfile = os.path.join(results_dir, '.parse.cmd')
+			cmd = generate_parse_command(results_dir)
+			print >> open(cmdfile, 'w'), cmd
+		else:
+			for queue_entry in self.queue_entries:
+				results_dir = queue_entry.results_dir()
+				cmdfile = os.path.join(results_dir,
+						       '.parse.cmd')
+				cmd = generate_parse_command(results_dir,
+							     '-l 2')
+				print >> open(cmdfile, 'w'), cmd
+
 		# write some job timestamps into the job keyval file
 		queued = time.mktime(self.job.created_on.timetuple())
 		started = time.time()
diff --git a/server/server_job.py b/server/server_job.py
index d217d88..e76ab3e 100755
--- a/server/server_job.py
+++ b/server/server_job.py
@@ -11,7 +11,7 @@
 Andy Whitcroft <apw@shadowen.org>
 """
 
-import os, sys, re, time, select, traceback
+import os, sys, re, time, select, subprocess, traceback
 import test
 from utils import *
 from common.error import *
@@ -440,7 +440,7 @@
 			line = self.record_prefix + line + '\n'
 			status_log.write(line)
 		status_log.close()
-
+		self.__parse_status()
 
 
 	def __record(self, status_code, subdir, operation, status='',
@@ -464,6 +464,18 @@
 				os.mkdir(test_dir)
 			status_file = os.path.join(test_dir, 'status')
 			open(status_file, "a").write(msg)
+		self.__parse_status()
+
+
+	def __parse_status(self):
+		"""
+		If a .parse.cmd file is present in the results directory,
+		launch the tko parser.
+		"""
+		cmdfile = os.path.join(self.resultdir, '.parse.cmd')
+		if os.path.exists(cmdfile):
+			cmd = open(cmdfile).read().strip()
+			subprocess.Popen(cmd, shell=True)
 
 
 # a file-like object for catching stderr from an autotest client and