Patchwork oeqa/utils: sshcontrol: realtime logging of output

login
register
mail settings
Submitter Stanacar, StefanX
Date April 25, 2014, 11:35 a.m.
Message ID <1398425727-17087-1-git-send-email-stefanx.stanacar@intel.com>
Download mbox | patch
Permalink /patch/70957/
State Accepted
Commit 2b822a8458fe904626045c7e9e0291de806e31c1
Headers show

Comments

Stanacar, StefanX - April 25, 2014, 11:35 a.m.
Log the output of the command as it runs not when it finished, else
tail -f tmp/work/minnow-poky-linux/core-image-sato/1.0-r0/testimage/ssh_target_log
isn't as useful as it could be.

Signed-off-by: Stefan Stanacar <stefanx.stanacar@intel.com>
---
 meta/lib/oeqa/utils/sshcontrol.py | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

Patch

diff --git a/meta/lib/oeqa/utils/sshcontrol.py b/meta/lib/oeqa/utils/sshcontrol.py
index d355d5e..1c81795 100644
--- a/meta/lib/oeqa/utils/sshcontrol.py
+++ b/meta/lib/oeqa/utils/sshcontrol.py
@@ -29,8 +29,15 @@  class SSHProcess(object):
         self.output = None
         self.process = None
         self.starttime = None
+        self.logfile = None
 
-    def run(self, command, timeout=None):
+    def log(self, msg):
+        if self.logfile:
+            with open(self.logfile, "a") as f:
+               f.write("%s" % msg)
+
+    def run(self, command, timeout=None, logfile=None):
+        self.logfile = logfile
         self.starttime = time.time()
         output = ''
         self.process = subprocess.Popen(command, **self.options)
@@ -45,8 +52,10 @@  class SSHProcess(object):
                         eof = True
                     else:
                         output += data
+                        self.log(data)
                         endtime = time.time() + timeout
 
+
             # process hasn't returned yet
             if not eof:
                 self.process.terminate()
@@ -55,9 +64,12 @@  class SSHProcess(object):
                     self.process.kill()
                 except OSError:
                     pass
-                output += "\nProcess killed - no output for %d seconds. Total running time: %d seconds." % (timeout, time.time() - self.starttime)
+                lastline = "\nProcess killed - no output for %d seconds. Total running time: %d seconds." % (timeout, time.time() - self.starttime)
+                self.log(lastline)
+                output += lastline
         else:
             output = self.process.communicate()[0]
+            self.log(output.rstrip())
 
         self.status = self.process.wait()
         self.output = output.rstrip()
@@ -91,9 +103,8 @@  class SSHControl(object):
         self.log("[Running]$ %s" % " ".join(command))
 
         proc = SSHProcess()
-        status, output = proc.run(command, timeout)
+        status, output = proc.run(command, timeout, logfile=self.logfile)
 
-        self.log("%s" % output)
         self.log("[Command returned '%d' after %.2f seconds]" % (status, time.time() - proc.starttime))
 
         if status and not ignore_status: