From c99fda7cb1019c036c5caa828e2febe935d4aaf0 Mon Sep 17 00:00:00 2001 From: Martin Klozik Date: Wed, 19 Aug 2015 07:52:39 +0100 Subject: 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 Reviewed-by: Billy O Mahony --- tools/systeminfo.py | 139 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 tools/systeminfo.py (limited to 'tools/systeminfo.py') 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) + -- cgit 1.2.3-korg