ssh: add new get_file_obj method to fetch remote files 39/39839/1
authorRoss Brattain <ross.b.brattain@intel.com>
Mon, 21 Aug 2017 05:09:33 +0000 (22:09 -0700)
committerRoss Brattain <ross.b.brattain@intel.com>
Tue, 22 Aug 2017 03:12:32 +0000 (20:12 -0700)
We can either cat remote files, or we can just sftp get
them.

use sftp get for /proc/cpuinfo since it can be so very large
on systems with 88+ cores.

Change-Id: I420b8c5eefdce8bb3e3b13dcc8257583dee537c1
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
yardstick/network_services/helpers/cpu.py
yardstick/ssh.py

index a5ba6c3..8c21754 100644 (file)
@@ -13,6 +13,9 @@
 # limitations under the License.
 
 
+import io
+
+
 class CpuSysCores(object):
 
     def __init__(self, connection=""):
@@ -20,8 +23,9 @@ class CpuSysCores(object):
         self.connection = connection
 
     def _open_cpuinfo(self):
-        lines = []
-        lines = self.connection.execute("cat /proc/cpuinfo")[1].split(u'\n')
+        cpuinfo = io.BytesIO()
+        self.connection.get_file_obj("/proc/cpuinfo", cpuinfo)
+        lines = cpuinfo.getvalue().decode('utf-8').splitlines()
         return lines
 
     def _get_core_details(self, lines):
index 8ac3eaa..a024cf6 100644 (file)
@@ -423,6 +423,12 @@ class SSH(object):
             if mode is not None:
                 sftp.chmod(remotepath, mode)
 
+    def get_file_obj(self, remotepath, file_obj):
+        client = self._get_client()
+
+        with client.open_sftp() as sftp:
+            sftp.getfo(remotepath, file_obj)
+
 
 class AutoConnectSSH(SSH):
 
@@ -471,6 +477,10 @@ class AutoConnectSSH(SSH):
         self._connect()
         return super(AutoConnectSSH, self).put_file_obj(file_obj, remote_path, mode)
 
+    def get_file_obj(self, remote_path, file_obj):
+        self._connect()
+        return super(AutoConnectSSH, self).get_file_obj(remote_path, file_obj)
+
     def provision_tool(self, tool_path, tool_file=None):
         self._connect()
         return super(AutoConnectSSH, self).provision_tool(tool_path, tool_file)