summaryrefslogtreecommitdiffstats
path: root/tools/systeminfo.py
diff options
context:
space:
mode:
authorMartin Klozik <martinx.klozik@intel.com>2015-08-19 07:52:39 +0100
committerMaryam Tahhan <maryam.tahhan@intel.com>2015-08-19 13:08:40 +0000
commitc99fda7cb1019c036c5caa828e2febe935d4aaf0 (patch)
tree257a8afeefd46372db4e7e2e60ecfd25793f078a /tools/systeminfo.py
parent3af55a78fcd572f93b1a46178bffc4c8e90534f2 (diff)
Initial reporting implemenation
Reporting from TOIT was merged and improved. Default template was modified to support any testcase and to show more details about system environment. Affected files: * docs/NEWS.md * testcases/testcase.py * tools/report/__init__.py * tools/report/report.jinja * tools/report/report.py * tools/systeminfo.py * vsperf JIRA: VSPERF-71 Change-Id: I4dc84ca69e5c292eae1f8dede1411c06ae3ef8af Signed-off-by: Martin Klozik (martinx.klozik@intel.com) Reviewed-by: Maryam Tahhan <maryam.tahhan@intel.com> Reviewed-by: Billy O Mahony <billy.o.mahony@intel.com>
Diffstat (limited to 'tools/systeminfo.py')
-rw-r--r--tools/systeminfo.py139
1 files changed, 139 insertions, 0 deletions
diff --git a/tools/systeminfo.py b/tools/systeminfo.py
new file mode 100644
index 00000000..19c5d16e
--- /dev/null
+++ b/tools/systeminfo.py
@@ -0,0 +1,139 @@
+# Copyright 2015 Intel Corporation.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Tools for access to OS details
+"""
+
+import os
+import platform
+import subprocess
+import locale
+
+from conf import settings
+
+def get_os():
+ """Get distro name.
+
+ :returns: Return distro name as a string
+ """
+ return ' '.join(platform.dist())
+
+def get_kernel():
+ """Get kernel version.
+
+ :returns: Return kernel version as a string
+ """
+ return platform.release()
+
+def get_cpu():
+ """Get CPU information.
+
+ :returns: Return CPU information as a string
+ """
+ with open('/proc/cpuinfo') as file_:
+ for line in file_:
+ if not line.strip():
+ continue
+ if not line.rstrip('\n').startswith('model name'):
+ continue
+
+ return line.rstrip('\n').split(':')[1]
+
+def get_nic():
+ """Get NIC(s) information.
+
+ :returns: Return NIC(s) information as a string
+ """
+ nics = []
+ output = subprocess.check_output('lspci', shell=True)
+ output = output.decode(locale.getdefaultlocale()[1])
+ for line in output.split('\n'):
+ for nic_pciid in settings.getValue('WHITELIST_NICS'):
+ if line.startswith(nic_pciid):
+ nics.append(''.join(line.split(':')[2:]).strip())
+ return ', '.join(nics).strip()
+
+def get_platform():
+ """Get platform information.
+
+ Currently this is the motherboard vendor, name and socket
+ count.
+
+ :returns: Return platform information as a string
+ """
+ output = []
+
+ with open('/sys/class/dmi/id/board_vendor', 'r') as file_:
+ output.append(file_.readline().rstrip())
+
+ with open('/sys/class/dmi/id/board_name', 'r') as file_:
+ output.append(file_.readline().rstrip())
+
+ num_nodes = len([name for name in os.listdir(
+ '/sys/devices/system/node/') if name.startswith('node')])
+ output.append(''.join(['[', str(num_nodes), ' sockets]']))
+
+ return ' '.join(output).strip()
+
+def get_cpu_cores():
+ """Get number of CPU cores.
+
+ :returns: Return number of CPU cores
+ """
+ cores = 0
+ with open('/proc/cpuinfo') as file_:
+ for line in file_:
+ if line.rstrip('\n').startswith('processor'):
+ cores += 1
+ continue
+
+ # this code must be executed by at leat one core...
+ if cores < 1:
+ cores = 1
+ return cores
+
+def get_memory():
+ """Get memory information.
+
+ :returns: amount of system memory as string together with unit
+ """
+ with open('/proc/meminfo') as file_:
+ for line in file_:
+ if not line.strip():
+ continue
+ if not line.rstrip('\n').startswith('MemTotal'):
+ continue
+
+ return line.rstrip('\n').split(':')[1].strip()
+
+def get_memory_bytes():
+ """Get memory information in bytes
+
+ :returns: amount of system memory
+ """
+ mem_list = get_memory().split(' ')
+ mem = float(mem_list[0].strip())
+ if mem_list.__len__() > 1:
+ unit = mem_list[1].strip().lower()
+ if unit == 'kb':
+ mem *= 1024
+ elif unit == 'mb':
+ mem *= 1024 ** 2
+ elif unit == 'gb':
+ mem *= 1024 ** 3
+ elif unit == 'tb':
+ mem *= 1024 ** 4
+
+ return int(mem)
+