Implemented hooks for external logging infrastructure for storing both server-side and client-side logs.
Signed-off-by: Svitlana Tumanova <stumanova@google.com>
git-svn-id: http://test.kernel.org/svn/autotest/trunk@1408 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/server/autotest.py b/server/autotest.py
index 2672afb..9a37e15 100644
--- a/server/autotest.py
+++ b/server/autotest.py
@@ -175,6 +175,29 @@
return host
+ def read_keyval(self, dest):
+ keyval = {}
+ try:
+ keyval = utils.read_keyval(dest)
+ except IOError:
+ traceback.print_exc()
+ return keyval
+
+
+ def prepend_keyval(self, dest, keyval):
+ try:
+ new_keyval = utils.read_keyval(dest)
+ # Old entries should overwrite new entries.
+ for key, val in keyval.iteritems():
+ new_keyval[key] = val
+ # Delete existing keyval file
+ os.remove(os.path.join(dest, 'keyval'))
+ # Write out new info to keyval file
+ utils.write_keyval(dest, new_keyval)
+ except IOError:
+ traceback.print_exc()
+
+
def _do_run(self, control_file, results_dir, host, atrun, timeout):
try:
atrun.verify_machine()
@@ -215,9 +238,11 @@
# get the results
results = os.path.join(atrun.autodir, 'results',
- 'default')
+ 'default')
+ keyval = self.read_keyval(results_dir)
# Copy all dirs in default to results_dir
host.get_file(results + '/', results_dir)
+ self.prepend_keyval(results_dir, keyval)
def run_timed_test(self, test_name, results_dir = '.', host = None,
@@ -276,6 +301,8 @@
cmd = [os.path.join(self.autodir, 'bin/autotest_client')]
if section > 0:
cmd.append('-c')
+ if self.host.job.use_external_logging():
+ cmd.append('-l')
cmd.append(self.remote_control_file)
return ' '.join(cmd)
diff --git a/server/hosts/ssh_host.py b/server/hosts/ssh_host.py
index b920af6..a9f1297 100644
--- a/server/hosts/ssh_host.py
+++ b/server/hosts/ssh_host.py
@@ -312,6 +312,7 @@
Raises:
AutoservRunError: the exit code of the command
execution was not 0
+ AutoservSSHTimeout: ssh connection has timed out
"""
stdout = stdout_tee or sys.stdout
stderr = stderr_tee or sys.stdout
diff --git a/server/server_job.py b/server/server_job.py
index c37c96c..bc39916 100755
--- a/server/server_job.py
+++ b/server/server_job.py
@@ -106,7 +106,7 @@
return {}
-class server_job:
+class base_server_job:
"""The actual job against which we do everything.
Properties:
@@ -203,6 +203,24 @@
self.verify()
+ def enable_external_logging(self):
+ """Start or restart external logging mechanism.
+ """
+ pass
+
+
+ def disable_external_logging(self):
+ """ Pause or stop external logging mechanism.
+ """
+ pass
+
+
+ def use_external_logging(self):
+ """Return True if external logging should be used.
+ """
+ return False
+
+
def run(self, reboot = False, install_before = False,
install_after = False, collect_crashdumps = True,
namespace = {}):
@@ -217,7 +235,8 @@
test_start_time = int(time.time())
os.chdir(self.resultdir)
-
+
+ self.enable_external_logging()
status_log = os.path.join(self.resultdir, 'status.log')
try:
if install_before and machines:
@@ -237,6 +256,7 @@
namespace['test_start_time'] = test_start_time
exec(preamble + crashdumps,
namespace, namespace)
+ self.disable_external_logging()
if reboot and machines:
exec(preamble + reboot_segment,
namespace, namespace)
@@ -630,3 +650,14 @@
self._process_line(self.leftover)
self._process_logs()
self.flush()
+
+# site_server_job.py may be non-existant or empty, make sure that an
+# appropriate site_server_job class is created nevertheless
+try:
+ from site_server_job import site_server_job
+except ImportError:
+ class site_server_job(base_server_job):
+ pass
+
+class server_job(site_server_job):
+ pass