import rteval-3.5-4.el8

c8 imports/c8/rteval-3.5-4.el8
MSVSphere Packaging Team 1 year ago
commit b95731912d

1
.gitignore vendored

@ -0,0 +1 @@
SOURCES/rteval-3.5.tar.xz

@ -0,0 +1 @@
3aee70e8cca181b05b522acab8a44d45fb876e28 SOURCES/rteval-3.5.tar.xz

@ -0,0 +1,165 @@
From 149c119df7c7a8ddfd1abc7a127d536cc0674230 Mon Sep 17 00:00:00 2001
From: John Kacur <jkacur@redhat.com>
Date: Tue, 23 Aug 2022 14:57:37 -0400
Subject: [PATCH 1/3] rteval: Fix "DMI WARNING" when not running as root
In some cases it is not necessary to run as root, for example when
running -Z (--summarize) to summarize an existing report.
In such cases we do not want to see the message:
** DMI WARNING ** Failed to open memory buffer (/dev/mem): Permission denied
The fix here is to surpresses that message.
In addition:
- the unused "config" option to DMIinfo.__init__ is removed
- A few strings are converted to f-strings
- "with" is used to open the xsltfile
Signed-off-by: John Kacur <jkacur@redhat.com>
---
rteval/sysinfo/__init__.py | 6 ++---
rteval/sysinfo/dmi.py | 45 +++++++++++++++++++-------------------
2 files changed, 26 insertions(+), 25 deletions(-)
diff --git a/rteval/sysinfo/__init__.py b/rteval/sysinfo/__init__.py
index 0436ebb350d9..a4359382f006 100644
--- a/rteval/sysinfo/__init__.py
+++ b/rteval/sysinfo/__init__.py
@@ -42,7 +42,7 @@ class SystemInfo(KernelInfo, SystemServices, dmi.DMIinfo, CPUtopology,
self.__logger = logger
KernelInfo.__init__(self, logger=logger)
SystemServices.__init__(self, logger=logger)
- dmi.DMIinfo.__init__(self, config, logger=logger)
+ dmi.DMIinfo.__init__(self, logger=logger)
CPUtopology.__init__(self)
OSInfo.__init__(self, logger=logger)
cmdlineInfo.__init__(self, logger=logger)
@@ -80,8 +80,8 @@ if __name__ == "__main__":
cfg.installdir = "."
si = SystemInfo(cfg, logger=l)
- print("\tRunning on %s" % si.get_base_os())
- print("\tNUMA nodes: %d" % si.mem_get_numa_nodes())
+ print(f"\tRunning on {si.get_base_os()}")
+ print(f"\tNUMA nodes: {si.mem_get_numa_nodes()}")
print("\tMemory available: %03.2f %s\n" % si.mem_get_size())
print("\tServices: ")
diff --git a/rteval/sysinfo/dmi.py b/rteval/sysinfo/dmi.py
index 80cf3c723b36..5965c128c093 100644
--- a/rteval/sysinfo/dmi.py
+++ b/rteval/sysinfo/dmi.py
@@ -1,6 +1,4 @@
#
-# dmi.py - class to wrap DMI Table information
-#
# Copyright 2009 - 2013 Clark Williams <williams@redhat.com>
# Copyright 2009 - 2013 David Sommerseth <davids@redhat.com>
#
@@ -24,6 +22,7 @@
# including keys needed to generate an equivalently functional executable
# are deemed to be part of the source code.
#
+""" dmi.py class to wrap DMI Table Information """
import sys
import os
@@ -52,16 +51,18 @@ def ProcessWarnings():
if warnings is None:
return
+ ignore1 = '/dev/mem: Permission denied'
+ ignore2 = 'No SMBIOS nor DMI entry point found, sorry.'
+ ignore3 = 'Failed to open memory buffer (/dev/mem): Permission denied'
+ ignore = (ignore1, ignore2, ignore3)
for warnline in warnings.split('\n'):
# Ignore these warnings, as they are "valid" if not running as root
- if warnline == '/dev/mem: Permission denied':
- continue
- if warnline == 'No SMBIOS nor DMI entry point found, sorry.':
+ if warnline in ignore:
continue
# All other warnings will be printed
if len(warnline) > 0:
- print("** DMI WARNING ** %s" % warnline)
+ print(f"** DMI WARNING ** {warnline}")
dmidecode.clear_warnings()
@@ -69,8 +70,7 @@ def ProcessWarnings():
class DMIinfo:
'''class used to obtain DMI info via python-dmidecode'''
- # TODO: Remove unnecessary config
- def __init__(self, config, logger):
+ def __init__(self, logger):
self.__version = '0.5'
if not dmidecode_loaded:
@@ -83,22 +83,24 @@ class DMIinfo:
self.__xsltparser = self.__load_xslt('rteval_dmi.xsl')
- def __load_xslt(self, fname):
- xsltfile = None
+ @staticmethod
+ def __load_xslt(fname):
+ xsltf = None
if os.path.exists(fname):
- xsltfile = open(fname, "r")
- elif rtevalConfig.default_config_search([fname], os.path.isfile):
- xsltfile = open(rtevalConfig.default_config_search([fname], os.path.isfile), "r")
-
- if xsltfile:
- xsltdoc = lxml.etree.parse(xsltfile)
- ret = lxml.etree.XSLT(xsltdoc)
- xsltfile.close()
+ xsltf = fname
+ else:
+ xsltf = rtevalConfig.default_config_search([fname], os.path.isfile)
+
+ if xsltf:
+ with open(xsltf, "r") as xsltfile:
+ xsltdoc = lxml.etree.parse(xsltfile)
+ ret = lxml.etree.XSLT(xsltdoc)
return ret
raise RuntimeError(f'Could not locate XSLT template for DMI data ({fname})')
def MakeReport(self):
+ """ Add DMI information to final report """
rep_n = libxml2.newNode("DMIinfo")
rep_n.newProp("version", self.__version)
if self.__fake:
@@ -113,7 +115,7 @@ class DMIinfo:
return rep_n
def unit_test(rootdir):
- """ unit_test for dmi.py, looks a little crufty! """
+ """ unit_test for dmi.py """
class UnittestConfigDummy:
def __init__(self, rootdir):
@@ -132,15 +134,14 @@ def unit_test(rootdir):
log = Log()
log.SetLogVerbosity(Log.DEBUG|Log.INFO)
- cfg = UnittestConfigDummy(rootdir)
- d = DMIinfo(cfg, log)
+ d = DMIinfo(log)
dx = d.MakeReport()
x = libxml2.newDoc("1.0")
x.setRootElement(dx)
x.saveFormatFileEnc("-", "UTF-8", 1)
return 0
except Exception as e:
- print("** EXCEPTION: %s" % str(e))
+ print(f"** EXCEPTION: {str(e)}")
return 1
if __name__ == '__main__':
--
2.37.3

@ -0,0 +1,54 @@
From eacf0f1e55fa0e7217133172808bfef2c59242fb Mon Sep 17 00:00:00 2001
From: John Kacur <jkacur@redhat.com>
Date: Thu, 2 Feb 2023 00:47:31 -0500
Subject: [PATCH] rteval: Catch failures in python-dmidecode
python-dmidecode can generate incorrect xml,
namely Attribute unit redefined
Although useful, the dmidecode is not critical to rteval reporting.
Therefore catch this, and first see if we can at least query the bios.
If that works report the bios instead of all, and if that
doesn't work, just continue without the dmidecode report.
Signed-off-by: John Kacur <jkacur@redhat.com>
---
rteval/sysinfo/dmi.py | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/rteval/sysinfo/dmi.py b/rteval/sysinfo/dmi.py
index 83f347623b58..89a7faae06b1 100644
--- a/rteval/sysinfo/dmi.py
+++ b/rteval/sysinfo/dmi.py
@@ -79,6 +79,7 @@ class DMIinfo:
def __init__(self, logger=None):
self.__version = '0.6'
+ self._log = logger
if not dmidecode_avail:
logger.log(Log.DEBUG, "DMI info unavailable, ignoring DMI tables")
@@ -115,7 +116,18 @@ class DMIinfo:
rep_n.newProp("not_available", "1")
else:
self.__dmixml.SetResultType(dmidecode.DMIXML_DOC)
- dmiqry = xmlout.convert_libxml2_to_lxml_doc(self.__dmixml.QuerySection('all'))
+ try:
+ dmiqry = xmlout.convert_libxml2_to_lxml_doc(self.__dmixml.QuerySection('all'))
+ except Exception as ex1:
+ self._log.log(Log.DEBUG, f'** EXCEPTION {str(ex1)}, will query BIOS only')
+ try:
+ # If we can't query 'all', at least query 'bios'
+ dmiqry = xmlout.convert_libxml2_to_lxml_doc(self.__dmixml.QuerySection('bios'))
+ except Exception as ex2:
+ rep_n.addContent("No DMI tables available")
+ rep_n.newProp("not_available", "1")
+ self._log.log(Log.DEBUG, f'** EXCEPTION {str(ex2)}, dmi info will not be reported')
+ return rep_n
resdoc = self.__xsltparser(dmiqry)
dmi_n = xmlout.convert_lxml_to_libxml2_nodes(resdoc.getroot())
rep_n.addChild(dmi_n)
--
2.39.0

@ -0,0 +1,169 @@
From bce23ecc5d8bb6cab86843f7a42164ee44ef091f Mon Sep 17 00:00:00 2001
From: John Kacur <jkacur@redhat.com>
Date: Thu, 27 Oct 2022 11:14:27 -0400
Subject: [PATCH 3/3] rteval: Don't attempt to get DMIinfo if there are dmi
warnings
If the python module dmidecode is available, but produces warnings,
you can get a traceback. This happens on some arm boxes,
as shown in the traceback below.
Fix this by treating any warnings that are not listed in the
ignorable warnings as if dmi info is not available.
Also add logging to dmi.ProcessWarnings()
./rteval-cmd -d10s
** DMI WARNING ** /sys/firmware/efi/systab: SMBIOS entry point missing
got system topology: 1 node system (4 cores per node)
rteval run on 5.19.16-200.fc36.aarch64 started at Fri Oct 21 16:11:51 2022
started 3 loads on 4 cores
started measurement threads on 4 cores
Run duration: 10.0 seconds
stopping run at Fri Oct 21 16:13:26 2022
Traceback (most recent call last):
File "/root/src/rteval/./rteval-cmd", line 402, in <module>
ec = rteval.Measure()
File "/root/src/rteval/rteval/__init__.py", line 286, in Measure
self._report(measure_start, self.__rtevcfg.xslt_report)
File "/root/src/rteval/rteval/rtevalReport.py", line 76, in _report
self.__xmlreport.AppendXMLnodes(self._sysinfo.MakeReport())
File "/root/src/rteval/rteval/sysinfo/__init__.py", line 69, in MakeReport
report_n.addChild(dmi.DMIinfo.MakeReport(self))
File "/root/src/rteval/rteval/sysinfo/dmi.py", line 111, in MakeReport
dmiqry = xmlout.convert_libxml2_to_lxml_doc(self.__dmixml.QuerySection('all'))
File "/usr/lib64/python3.10/site-packages/dmidecode.py", line 64, in QuerySection
ret = libxml2.xmlDoc( _obj = xmlapi(query_type='s',
RuntimeError: [src/dmidecodemodule.c:331] Error decoding DMI data
** COLLECTED WARNINGS **
/sys/firmware/efi/systab: SMBIOS entry point missing
** END OF WARNINGS **
Signed-off-by: John Kacur <jkacur@redhat.com>
---
rteval-cmd | 4 ++--
rteval/sysinfo/__init__.py | 2 +-
rteval/sysinfo/dmi.py | 34 +++++++++++++++++++++-------------
3 files changed, 24 insertions(+), 16 deletions(-)
diff --git a/rteval-cmd b/rteval-cmd
index 6a928362828f..1e6a7fc86baa 100755
--- a/rteval-cmd
+++ b/rteval-cmd
@@ -210,8 +210,6 @@ def remove_offline(cpulist):
if __name__ == '__main__':
from rteval.sysinfo import dmi
- dmi.ProcessWarnings()
-
# set LD_BIND_NOW to resolve shared library symbols
# note: any string will do, nothing significant about 'rteval'
@@ -261,6 +259,8 @@ if __name__ == '__main__':
| (rtevcfg.debugging and Log.DEBUG)
logger.SetLogVerbosity(loglev)
+ dmi.ProcessWarnings(logger=logger)
+
# Load modules
loadmods = LoadModules(config, logger=logger)
measuremods = MeasurementModules(config, logger=logger)
diff --git a/rteval/sysinfo/__init__.py b/rteval/sysinfo/__init__.py
index bb1d00810856..5767e5b7f6fe 100644
--- a/rteval/sysinfo/__init__.py
+++ b/rteval/sysinfo/__init__.py
@@ -49,7 +49,7 @@ class SystemInfo(KernelInfo, SystemServices, dmi.DMIinfo, CPUtopology,
NetworkInfo.__init__(self, logger=logger)
# Parse initial DMI decoding errors
- dmi.ProcessWarnings()
+ dmi.ProcessWarnings(logger=logger)
# Parse CPU info
CPUtopology._parse(self)
diff --git a/rteval/sysinfo/dmi.py b/rteval/sysinfo/dmi.py
index 5965c128c093..83f347623b58 100644
--- a/rteval/sysinfo/dmi.py
+++ b/rteval/sysinfo/dmi.py
@@ -1,6 +1,7 @@
#
# Copyright 2009 - 2013 Clark Williams <williams@redhat.com>
# Copyright 2009 - 2013 David Sommerseth <davids@redhat.com>
+# Copyright 2022 John Kacur <jkacur@redhat.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -34,14 +35,19 @@ from rteval import rtevalConfig
try:
import dmidecode
- dmidecode_loaded = True
+ dmidecode_avail = True
except ModuleNotFoundError:
- dmidecode_loaded = False
+ dmidecode_avail = False
-def ProcessWarnings():
+def set_dmidecode_avail(val):
+ """ Used to set global variable dmidecode_avail from a function """
+ global dmidecode_avail
+ dmidecode_avail = val
+
+def ProcessWarnings(logger=None):
""" Process Warnings from dmidecode """
- if not dmidecode_loaded:
+ if not dmidecode_avail:
return
if not hasattr(dmidecode, 'get_warnings'):
@@ -62,7 +68,8 @@ def ProcessWarnings():
# All other warnings will be printed
if len(warnline) > 0:
- print(f"** DMI WARNING ** {warnline}")
+ logger.log(Log.DEBUG, f"** DMI WARNING ** {warnline}")
+ set_dmidecode_avail(False)
dmidecode.clear_warnings()
@@ -70,11 +77,11 @@ def ProcessWarnings():
class DMIinfo:
'''class used to obtain DMI info via python-dmidecode'''
- def __init__(self, logger):
- self.__version = '0.5'
+ def __init__(self, logger=None):
+ self.__version = '0.6'
- if not dmidecode_loaded:
- logger.log(Log.DEBUG|Log.WARN, "No dmidecode module found, ignoring DMI tables")
+ if not dmidecode_avail:
+ logger.log(Log.DEBUG, "DMI info unavailable, ignoring DMI tables")
self.__fake = True
return
@@ -127,14 +134,15 @@ def unit_test(rootdir):
self.__dict__[k] = self.config[k]
try:
- ProcessWarnings()
+ log = Log()
+ log.SetLogVerbosity(Log.DEBUG|Log.INFO)
+
+ ProcessWarnings(logger=log)
if os.getuid() != 0:
print("** ERROR ** Must be root to run this unit_test()")
return 1
- log = Log()
- log.SetLogVerbosity(Log.DEBUG|Log.INFO)
- d = DMIinfo(log)
+ d = DMIinfo(logger=log)
dx = d.MakeReport()
x = libxml2.newDoc("1.0")
x.setRootElement(dx)
--
2.37.3

@ -0,0 +1,399 @@
From d0552193364d160252d117c5bf2e298a31550e3c Mon Sep 17 00:00:00 2001
From: John Kacur <jkacur@redhat.com>
Date: Mon, 10 Oct 2022 09:49:47 -0400
Subject: [PATCH] rteval: Replace python-ethtool with inline code
This patch adds the file newnet.py to replace the use of python-ethtool
The information it generates will appear in the summary.xml
You can also test the functionality by running
python rteval/sysinfo/newnet.py
Signed-off-by: John Kacur <jkacur@redhat.com>
- V2 Add SPDX license identifier
Signed-off-by: John Kacur <jkacur@redhat.com>
---
rteval/sysinfo/__init__.py | 3 +-
rteval/sysinfo/network.py | 117 -------------------
rteval/sysinfo/newnet.py | 225 +++++++++++++++++++++++++++++++++++++
3 files changed, 227 insertions(+), 118 deletions(-)
delete mode 100644 rteval/sysinfo/network.py
create mode 100644 rteval/sysinfo/newnet.py
diff --git a/rteval/sysinfo/__init__.py b/rteval/sysinfo/__init__.py
index a4359382f006..bb1d00810856 100644
--- a/rteval/sysinfo/__init__.py
+++ b/rteval/sysinfo/__init__.py
@@ -32,7 +32,7 @@ from rteval.sysinfo.services import SystemServices
from rteval.sysinfo.cputopology import CPUtopology
from rteval.sysinfo.memory import MemoryInfo
from rteval.sysinfo.osinfo import OSInfo
-from rteval.sysinfo.network import NetworkInfo
+from rteval.sysinfo.newnet import NetworkInfo
from rteval.sysinfo.cmdline import cmdlineInfo
from rteval.sysinfo import dmi
@@ -46,6 +46,7 @@ class SystemInfo(KernelInfo, SystemServices, dmi.DMIinfo, CPUtopology,
CPUtopology.__init__(self)
OSInfo.__init__(self, logger=logger)
cmdlineInfo.__init__(self, logger=logger)
+ NetworkInfo.__init__(self, logger=logger)
# Parse initial DMI decoding errors
dmi.ProcessWarnings()
diff --git a/rteval/sysinfo/network.py b/rteval/sysinfo/network.py
deleted file mode 100644
index ce9989a1240b..000000000000
--- a/rteval/sysinfo/network.py
+++ /dev/null
@@ -1,117 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Copyright 2009 - 2013 David Sommerseth <davids@redhat.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# For the avoidance of doubt the "preferred form" of this code is one which
-# is in an open unpatent encumbered format. Where cryptographic key signing
-# forms part of the process of creating an executable the information
-# including keys needed to generate an equivalently functional executable
-# are deemed to be part of the source code.
-#
-
-import ethtool, libxml2
-
-class NetworkInfo(object):
- def __init__(self):
- pass
-
- def net_GetDefaultGW(self):
- # Get the interface name for the IPv4 default gw
- route = open('/proc/net/route')
- defgw4 = None
- if route:
- rl = route.readline()
- while rl != '' :
- rl = route.readline()
- splt = rl.split("\t")
- # Only catch default route
- if len(splt) > 2 and splt[2] != '00000000' and splt[1] == '00000000':
- defgw4 = splt[0]
- break
- route.close()
- return (defgw4, None) # IPv6 gw not yet implemented
-
- def MakeReport(self):
- ncfg_n = libxml2.newNode("NetworkConfig")
- (defgw4, defgw6) = self.net_GetDefaultGW()
-
- # Make an interface tag for each device found
- if hasattr(ethtool, 'get_interfaces_info'):
- # Using the newer python-ethtool API (version >= 0.4)
- for dev in ethtool.get_interfaces_info(ethtool.get_devices()):
- if dev.device == 'lo':
- continue
-
- intf_n = libxml2.newNode('interface')
- intf_n.newProp('device', dev.device)
- intf_n.newProp('hwaddr', dev.mac_address)
- ncfg_n.addChild(intf_n)
-
- # Protcol configurations
- if dev.ipv4_address:
- ipv4_n = libxml2.newNode('IPv4')
- ipv4_n.newProp('ipaddr', dev.ipv4_address)
- ipv4_n.newProp('netmask', str(dev.ipv4_netmask))
- ipv4_n.newProp('broadcast', dev.ipv4_broadcast)
- ipv4_n.newProp('defaultgw', (defgw4 == dev.device) and '1' or '0')
- intf_n.addChild(ipv4_n)
-
- for ip6 in dev.get_ipv6_addresses():
- ipv6_n = libxml2.newNode('IPv6')
- ipv6_n.newProp('ipaddr', ip6.address)
- ipv6_n.newProp('netmask', str(ip6.netmask))
- ipv6_n.newProp('scope', ip6.scope)
- intf_n.addChild(ipv6_n)
-
- else: # Fall back to older python-ethtool API (version < 0.4)
- ifdevs = ethtool.get_active_devices()
- ifdevs.remove('lo')
- ifdevs.sort()
-
- for dev in ifdevs:
- intf_n = libxml2.newNode('interface')
- intf_n.newProp('device', dev.device)
- intf_n.newProp('hwaddr', dev.mac_address)
- ncfg_n.addChild(intf_n)
-
- ipv4_n = libxml2.newNode('IPv4')
- ipv4_n.newProp('ipaddr', ethtool.get_ipaddr(dev))
- ipv4_n.newProp('netmask', str(ethtool.get_netmask(dev)))
- ipv4_n.newProp('defaultgw', (defgw4 == dev) and '1' or '0')
- intf_n.addChild(ipv4_n)
-
- return ncfg_n
-
-
-def unit_test(rootdir):
- import sys
- try:
- net = NetworkInfo()
- doc = libxml2.newDoc('1.0')
- cfg = net.MakeReport()
- doc.setRootElement(cfg)
- doc.saveFormatFileEnc('-', 'UTF-8', 1)
-
- except Exception as e:
- import traceback
- traceback.print_exc(file=sys.stdout)
- print("** EXCEPTION %s", str(e))
- return 1
-
-if __name__ == '__main__':
- unit_test(None)
-
diff --git a/rteval/sysinfo/newnet.py b/rteval/sysinfo/newnet.py
new file mode 100644
index 000000000000..63417d9e59f1
--- /dev/null
+++ b/rteval/sysinfo/newnet.py
@@ -0,0 +1,225 @@
+''' Module to obtain network information for the rteval report '''
+#
+# Copyright 2022 John Kacur <jkacur@redhat.com
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+
+import os
+import socket
+import ipaddress
+import sys
+import libxml2
+from rteval.Log import Log
+
+def get_active_devices():
+ ''' returns a list of active network devices, similar to ethtool '''
+ ret = []
+
+ for device in socket.if_nameindex():
+ ret.append(device[1])
+
+ return ret
+
+def compress_iv6(addr):
+ ''' inserts colons into an ipv6address and returns it in compressed form '''
+ retaddr = ''
+ # Insert colons into the number
+ for i in range(4,33,4):
+ if i == 32:
+ retaddr += addr[i-4:i]
+ else:
+ retaddr += addr[i-4:i] + ':'
+ addr = ipaddress.IPv6Network(retaddr)
+ retaddr = str(ipaddress.IPv6Address(retaddr))
+ return retaddr
+
+def get_defaultgw():
+ ''' return the ipv4address of the default gateway '''
+ defaultgw = None
+ with open('/proc/net/route') as f:
+ line = f.readline().strip()
+ while len(line) > 0:
+ (iface, dest, gateway, _, _, _, _, _, _, _, _) = line.split()
+ if iface == 'Iface':
+ line = f.readline().strip()
+ continue
+ if dest == '00000000' and gateway != '00000000':
+ addr = int(gateway, base=16)
+ defaultgw = str(ipaddress.IPv4Address(socket.ntohl(addr)))
+ return defaultgw
+ line = f.readline().strip()
+ return defaultgw
+
+class IPv6Addresses():
+ ''' Obtains a list of IPv6 addresses from the proc file system '''
+
+ def __init__(self):
+ self.data = {}
+ IPv6Addresses.load(self)
+
+ def __contains__(self, dev):
+ return dev in self.data
+
+ def __getitem__(self, dev):
+ return self.data.get(dev, None)
+
+ def __iter__(self):
+ return iter(self.data)
+
+ def load(self):
+ '''
+ Called by init to load the self.data dictionary with device keys
+ and a list of ipv6addresses
+ '''
+ MYP = '/proc/net/if_inet6'
+ with open(MYP, 'r') as f:
+ mystr = f.readline().strip()
+ while len(mystr) > 0:
+ ipv6addr , _, _, _, _, intf = mystr.split()
+ ipv6addr = compress_iv6(ipv6addr)
+ if intf == 'lo':
+ mystr = f.readline().strip()
+ continue
+ if intf not in self.data:
+ self.data[intf] = [ipv6addr]
+ else:
+ self.data[intf].append(ipv6addr)
+ mystr = f.readline().strip()
+
+class IPv4Addresses():
+ ''' Obtains a list of IPv4 addresses from the proc file system '''
+
+ def __init__(self):
+ self.data = {}
+ IPv4Addresses.load(self)
+
+ def __contains__(self, dev):
+ return dev in self.data
+
+ def __getitem__(self, dev):
+ return self.data[dev]
+
+ def __iter__(self):
+ return iter(self.data)
+
+ def load(self):
+ '''
+ Called by init to load the self.data dictionary with
+ device keys, and value consisting of a list of
+ ipv4address, netmask and broadcast address
+ '''
+ MYP = '/proc/net/route'
+ with open(MYP, 'r') as f:
+ mystr = f.readline().strip()
+ while len(mystr) > 0:
+ intf, dest, _, _, _, _, _, mask, _, _, _ = mystr.split()
+ # Skip over the head of the table an the gateway line
+ if intf == "Iface" or dest == '00000000':
+ mystr = f.readline().strip()
+ continue
+ d1 = int(dest, base=16)
+ m1 = int(mask, base=16)
+ addr = str(ipaddress.IPv4Address(socket.ntohl(d1)))
+ netmask = str(ipaddress.IPv4Address(socket.ntohl(m1)))
+ addr_with_mask = ipaddress.ip_network(addr + '/' + netmask)
+ broadcast = str(addr_with_mask.broadcast_address)
+ if intf not in self.data:
+ self.data[intf] = [(addr, netmask, broadcast)]
+ else:
+ self.data[intf].append((addr, netmask, broadcast))
+ mystr = f.readline().strip()
+
+
+class MacAddresses():
+ ''' Obtains a list of hardware addresses of network devices '''
+
+ def __init__(self):
+ self.mac_address = {}
+ self.path = None
+ MacAddresses.load(self)
+
+ def load(self):
+ '''
+ called by init to load self.mac_address as a dictionary of
+ device keys, and mac or hardware addresses as values
+ '''
+ nics = get_active_devices()
+ for nic in nics:
+ self.path = f'/sys/class/net/{nic}'
+ hwaddr = MacAddresses.set_val(self, 'address')
+ self.mac_address[nic] = hwaddr
+
+ def set_val(self, val):
+ ''' Return the result of reading self.path/val '''
+ val_path = f'{self.path}/{val}'
+ if os.path.exists(val_path):
+ with open(val_path, 'r') as f:
+ return f.readline().strip()
+ return None
+
+ def __contains__(self, dev):
+ return dev in self.mac_address
+
+ def __getitem__(self, dev):
+ return self.mac_address[dev]
+
+ def __iter__(self):
+ return iter(self.mac_address)
+
+class NetworkInfo():
+ ''' Creates an xml report of the network for rteval '''
+
+ def __init__(self, logger):
+ self.defgw4 = get_defaultgw()
+ self.__logger = logger
+
+ def MakeReport(self):
+ ''' Make an xml report for rteval '''
+ ncfg_n = libxml2.newNode("NetworkConfig")
+ defgw4 = self.defgw4
+
+ mads = MacAddresses()
+ for device in mads:
+ if device == 'lo':
+ continue
+ intf_n = libxml2.newNode('interface')
+ intf_n.newProp('device', device)
+ intf_n.newProp('hwaddr', mads[device])
+ ncfg_n.addChild(intf_n)
+
+ ipv4ads = IPv4Addresses()
+ ipv6ads = IPv6Addresses()
+ for dev in ipv4ads:
+ if dev != device:
+ continue
+ for lelem in ipv4ads[dev]:
+ ipv4_n = libxml2.newNode('IPv4')
+ (ipaddr, netmask, broadcast) = lelem
+ ipv4_n.newProp('ipaddr', ipaddr)
+ ipv4_n.newProp('netmask', netmask)
+ ipv4_n.newProp('broadcast', broadcast)
+ ipv4_n.newProp('defaultgw', (defgw4 == ipaddr) and '1' or '0')
+ intf_n.addChild(ipv4_n)
+ if ipv6ads[dev]:
+ for lelem in ipv6ads[dev]:
+ ipv6_n = libxml2.newNode('IPv6')
+ ipaddr = lelem
+ ipv6_n.newProp('ipaddr', ipaddr)
+ intf_n.addChild(ipv6_n)
+ return ncfg_n
+
+if __name__ == "__main__":
+
+ try:
+ log = Log()
+ log.SetLogVerbosity(Log.DEBUG|Log.INFO)
+ net = NetworkInfo(logger=log)
+ doc = libxml2.newDoc('1.0')
+ cfg = net.MakeReport()
+ doc.setRootElement(cfg)
+ doc.saveFormatFileEnc('-', 'UTF-8', 1)
+
+ except Exception as e:
+ import traceback
+ traceback.print_exc(file=sys.stdout)
+ print(f"** EXCEPTION {str(e)}")
--
2.37.3

@ -0,0 +1,758 @@
Name: rteval
Version: 3.5
Release: 4%{?dist}
Summary: Utility to evaluate system suitability for RT Linux
Group: Development/Tools
License: GPLv2
URL: https://git.kernel.org/pub/scm/utils/rteval/rteval.git
Source0: https://www.kernel.org/pub/linux/utils/rteval/rteval-%{version}.tar.xz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: python3-devel
Requires: platform-python
Requires: python3-lxml
Requires: python3-libxml2
Requires: python3-dmidecode >= 3.10
Requires: python3-requests
Requires: rt-tests >= 1.5-11
Requires: rteval-loads >= 1.6-2
Requires: sysstat
Requires: xz bzip2 tar gzip m4 make gawk
Requires: kernel-headers
Requires: sos
BuildArch: noarch
Obsoletes: rteval <= 2.14
Requires: numactl
Requires: gcc binutils gcc-c++ flex bison bc make
Requires: elfutils elfutils-libelf-devel
Requires: openssl openssl-devel
Requires: stress-ng
Requires: perl-interpreter perl-devel perl-generators
Requires: libmpc libmpc-devel
Obsoletes: rteval-common <= 3.1
#Patches
Patch1: rteval-Replace-python-ethtool-with-inline-code.patch
Patch2: Fix-DMI-WARNING-when-not-running-as-root.patch
Patch3: rteval-Don-t-attempt-to-get-DMIinfo-if-there-are-dmi.patch
Patch4: rteval-Catch-failures-in-python-dmidecode.patch
%description
The rteval script is a utility for measuring various aspects of
realtime behavior on a system under load. The script unpacks the
kernel source, and then goes into a loop, running hackbench and
compiling a kernel tree. During that loop the cyclictest program
is run to measure event response time. After the run time completes,
a statistical analysis of the event response times is done and printed
to the screen.
%prep
%setup -q
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%build
%{__python3} setup.py build
%install
%{__python3} setup.py install --root=$RPM_BUILD_ROOT
%files
%defattr(-,root,root,-)
%{python3_sitelib}/*.egg-info
%doc COPYING README doc/rteval.txt
%dir %{_datadir}/%{name}
%{python3_sitelib}/rteval/rtevalclient.py*
%{python3_sitelib}/rteval/rtevalConfig.py*
%{python3_sitelib}/rteval/rtevalXMLRPC.py*
%{python3_sitelib}/rteval/version.py*
%{python3_sitelib}/rteval/Log.py*
%{python3_sitelib}/rteval/systopology.py*
%{_mandir}/man8/rteval.8.gz
%config(noreplace) %{_sysconfdir}/rteval.conf
%{_datadir}/%{name}/rteval_*.xsl
%{python3_sitelib}/rteval/__init__.py*
%{python3_sitelib}/rteval/rtevalMailer.py*
%{python3_sitelib}/rteval/rtevalReport.py*
%{python3_sitelib}/rteval/xmlout.py*
%{python3_sitelib}/rteval/modules
%{python3_sitelib}/rteval/sysinfo
/usr/bin/rteval
%{python3_sitelib}/rteval/__pycache__/*
%changelog
* Wed Feb 08 2023 John Kacur <jkacur@redhat.com> - 3.5-4
- Add check to catch python-dmidecode if it fails
Resolves: rhbz#2168373
jiraProject == RHELPLAN-148048
* Thu Oct 27 2022 John Kacur <jkacur@redhat.com> - 3.5-3
- Fix "DMI WARNING" when not running as root
- Don't attempt to get DMI info if dmidecode returns warnings
Resolves: rhbz#2136926
* Mon Oct 17 2022 John Kacur <jkacur@redhat.com> - 3.5-2
- Remove dependency on python-ethtool by using inline code
- Add Requires of python-libxml2
Resolves: rhbz#2131377
* Fri Sep 23 2022 John Kacur <jkacur@redhat.com> - 3.5-1
- Rebase to rteval-3.5 upstream
Resolves: rhbz#2119172
* Thu Sep 22 2022 Leah Leshchinsky <lleshchi@redhat.com> - 3.4-5
- Add measurement and load location to run report
Resolves: rhbz#2082260
* Tue Sep 13 2022 John Kacur <jkacur@redhat.com> - 3.4-4
- Make use of systopology instead of misc everywhere
- Allow user to enter compressed form of cpulist
Resolves: rhbz#2121535
* Mon Sep 12 2022 John Kacur <jkacur@redhat.com> - 3.4-3
- Add option for downloading the kernel to compile as a load
- Add a manpage entry for the kernel download option
Resolves: rhbz#2107710
* Tue Jun 28 2022 John Kacur <jkacur@redhat.com> - 3.4-2
- Add back __pycache__ to the rhel-8.7 spec file
Resolves: rhbz#2069354
* Tue Jun 28 2022 John Kacur <jkacur@redhat.com> - 3.4-1
- Rebase to rteval-3.4 upstream
Resolves: rhbz#2069354
* Wed Jun 22 2022 John Kacur <jkacur@redhat.com> - 3.3-9
- Add upstream kcompile patches
Resolves: rhbz#2093478
* Tue Jun 07 2022 John Kacur <jkacur@redhat.com> - 3.3-8
- Updates the Requires for rteval-loads with the correct kernel version
Resolves: rhbz#2093478
* Tue Jun 07 2022 John Kacur <jkacur@redhat.com> - 3.3-7
- Change the default kernel to compile to linux-5.18.1
Resolves: rhbz#2093478
* Tue Feb 15 2022 John Kacur <jkacur@redhat.com> - 3.3-6
- Use inherited cpumask if user doesn't specify a cpumask
Resolves: rhbz#2012284
* Mon Feb 07 2022 John Kacur <jkacur@redhat.com> - 3.3-5
- Don't restrict threads to cpumask in environment if user specifies cpumask
Resolves: rhbz#2012284
* Thu Jan 27 2022 John Kacur <jkacur@redhat.com> - 3.3-4
- Increase the default number of buckets from 2000 to 3500
Resolves: rhbz#2046321
* Tue Jan 18 2022 John Kacur <jkacur@redhat.com> - 3.3-3
- Fix Popen use of text=True not available in python3.6
Resolves: rhbz#2041584
* Fri Jan 14 2022 John Kacur <jkacur@redhat.com> - 3.3-2
- Fix test missing threshold assignment
Resolves: rhbz#2012285
* Thu Jan 13 2022 John Kacur <jkacur@redhat.com> - 3.3-1
- Rebase to upstream rteval-3.3
Resolves: rhbz#2012291
* Wed Jan 12 2022 John Kacur <jkacur@redhat.com> - 3.2-4
- Do not pass obsolete notrace option to cyclictest
- Parse maximum latency even if outside configured buckets
- Sort the list of cpus
- Skip statistics generation if max latency outside of configured buckets
- Add --cyclictest-threshold=USEC feature
- Add libmpc and libmpc-devel to the Requires
Resolves: rhbz#2012285
* Thu Nov 04 2021 John Kacur <jkacur@redhat.com> - 3.2-3
- allow hackbench to run with warning on low mem
- clean-ups to hackbench.py
- make donotrun work correctly in load modules
- Add the idea of an exclusive load module and make stress-ng one
Resolves: rhbz#1872776
* Thu Jul 15 2021 John Kacur <jkacur@redhat.com> - 3.2-2
- Restrict measurement threads to cpus in cpumask
Resolves: rhbz#1942261
* Thu Jul 15 2021 John Kacur <jkacur@redhat.com> - 3.2-1
- Rebase to latest upstream rteval-3.2
Resolves: rhbz#1982718
* Wed Jan 13 2021 John Kacur <jkacur@redhat.com> - 3.1-4
- Remove python-schedutils requirement
- Fix spec file to make Obsoletes rteval-common cover all necessary releases
Resolves: rhbz#1869340
* Wed Jan 13 2021 John Kacur <jkacur@redhat.com> - 3.1-3
- Remove a stray line in the changelog
Resolves: rhbz#1890555
* Wed Jan 13 2021 John Kacur <jkacur@redhat.com> - 3.1-2
- Fix incorrect import in rteval/sysinfo/__init__.py
Resolves: rhbz#1890555
* Mon Jan 11 2021 John Kacur <jkacur@redhat.com> - 3.1-1
- Upgrade to rteval-3.1
- Don't create a separate rteval-common package anymore
Resolves: rhbz#1890555
* Thu Aug 27 2020 John Kacur <jkacur@redhat.com> - 3.0-13
- Parse cpuinfo correctly when the model name has a colon in it.
Resolves: rhbz#1873120
* Thu Jul 23 2020 John Kacur <jkacur@redhat.com> - 3.0-12
- Use linux-5.7 in kcompile
Resolves: rhbz#1859762
* Thu Jun 25 2020 John Kacur <jkacur@redhat.com> - 3.0-11
- Make sure "make" is available for the kcompile module
Resolves: rhbz#1850924
* Wed Jun 24 2020 John Kacur <jkacur@redhat.com> - 3.0-10
- Ensure that a recent rteval-loads with stress-ng is required
Resolves: rhbz#1847233
* Wed Jun 24 2020 John Kacur <jkacur@redhat.com> - 3.0-9
- Ensure the stressng command line is displayed in the final report
Resolves: rhbz#1850151
* Mon Jun 15 2020 John Kacur <jkacur@redhat.com> - 3.0-8
- Add the stress-ng load module
Resolves: rhbz#1816360
* Mon May 04 2020 John Kacur <jkacur@redhat.com> - 3.0-7
- Make sure openssl is available so that rteval can compile the kernel
Resolves: rhbz#1831272
* Tue Dec 10 2019 John Kacur <jkacur@redhat.com> - 3.0-6
- Iterate over nodes and not sysTop
- Explictly add a few more software requires for compiling the kernel
Resolves: rhbz#1755603
* Tue Dec 03 2019 John Kacur <jkacur@redhat.com> - 3.0-5
- Explicitly add some software requires for compiling the kernel
Resolves: rhbz#1766879
* Mon Dec 02 2019 John Kacur <jkacur@redhat.com> - 3.0-4
- In hackbench.py node in args to Popen must be a string
Resolves: rhbz#1777048
* Tue Nov 19 2019 John Kacur <jkacur@redhat.com> - 3.0-3
- Don't assume cpu0 cannot be offlined, test for it
- Drop patches that are no longer in the spec file
Resolves: rhbz#1773792
* Mon Nov 18 2019 John Kacur <jkacur@redhat.com> - 3.0-2
- Check whether a cpu is online before adding to a list
- Change hackbench to use the systopology interface for online cpus
Resolves: rhbz#1715081
* Fri Nov 15 2019 John Kacur <jkacur@redhat.com> - 3.0-1
- Sync rt-tests and rteval-loads versions in the specfile
- Upgrade to upstream rteval-3.0
Resolves: rhbz#1748955
* Fri Nov 08 2019 John Kacur <jkacur@redhat.com> - 2.14-27
- Update kcompile sources to linux-5.1
Resolves: rhbz#1770215
* Fri Nov 08 2019 John Kacur <jkacur@redhat.com> - 2.14-26
- Fix number of hackbench jobs wrt number of CPUs
- Don't run on nodes with no CPUs available
Resolves: rhbz#1770211
* Tue Apr 02 2019 Clark Williams <williams@redhat.com> - 2.14.25
- fix incorrect test logic in gating tests
Resolves: rhbz#1682426
* Tue Apr 02 2019 Clark Williams <williams@redhat.com> - 2.14.24
- add rteval-loads dependency to gating
- added second test (short_run) to gating
Resolves: rhbz#1682426
* Mon Apr 01 2019 Clark Williams <williams@redhat.com> - 2.14.23
- add missing gating.yaml
Resolves: rhbz#1682426
* Mon Apr 01 2019 Clark Williams <williams@redhat.com> - 2.14.22
- checkin OSCI gating framework
Resolves: rhbz#1682426
* Mon Dec 17 2018 John Kacur <jkacur@redhat.com> - 2.14-21
- Fix typo in debug output
Resolves: rhbz#1659974
* Tue Oct 16 2018 John Kacur <jkacur@redhat.com> - 2.14-20
- Disable options for the remote xmlrpc server, not currently supported
Resolves: rhbz#1628322
* Sat Oct 13 2018 John Kacur <jkacur@redhat.com> - 2.14-19
- Fix Requires for python3
Resolves: rhbz#1638135
* Fri Oct 12 2018 John Kacur <jkacur@redhat.com> - 2.14-18
- Fix time format in report
Resolves: rhbz#1630733
* Fri Sep 28 2018 John Kacur <jkacur@redhat.com> - 2.14-17
- Change python3 to platform-python
Resolves: rhbz#1633619
* Fri Aug 10 2018 John Kacur <jkacur@redhat.com> - 2.14-16
- remove unnecssary encode that is causing problems
Resolves: rhbz#1614384
* Tue Aug 07 2018 John Kacur <jkacur@redhat.com> - 2.14-15
- tar is required in kcompile.py. Make it a Require in the specfile
Resolves: rhbz#1612992
* Fri Aug 03 2018 John Kacur <jkacur@redhat.com> - 2.14-14
- fix python3 division of integers
Resolves: rhbz#1611813
* Fri Aug 03 2018 John Kacur <jkacur@redhat.com> - 2.14-13
-fix rtevalclient import
Resolves: rhbz#1608464
* Sat Jun 23 2018 John Kacur <jkacur@redhat.com> - 2.14-12
- More python3 changes
- Changes for the new version of rt-tests that automates --numa
Resolves: rhbz#1594287
* Tue Jun 12 2018 John Kacur jkacur@redhat.com> - 2.14-11
- More specfile changes for python3 build
Resolves: rhbz#1518699
* Wed May 30 2018 John Kacur <jkacur@redhat.com> - 2.14-10
- Chnages for a python3 build
Resolves: rhbz#1518699
* Fri Oct 27 2017 John Kacur <jkacur@redhat.com> - 2.14-9
- Remove redundant files for clarity.
Resolves: rhbz1504162
* Fri Oct 27 2017 John Kacur <jkacur@redhat.com> - 2.14-8
- Don't fail if we don't know the init system
Resolves: rhbz1504168
* Fri Oct 20 2017 John Kacur <jkacur@redhat.com> - 2.14-7
- Remove underscore from sysread function in systopology.py
Resolves: rhbz1504164
* Fri Oct 20 2017 John Kacur <jkacur@redhat.com> - 2.14-6
- Improve error handling if cyclictest fails to run
Resolves: rhbz1504159
* Fri Oct 20 2017 John Kacur <jkacur@redhat.com> - 2.14-5
- Remove trace-cmd from Requires, since it is not needed to run rteval
Resolves: rhbz1504173
* Mon Oct 16 2017 John Kacur <jkacur@redhat.com> - 2.14-4
- Don't sleep if hackbench fails to launch due to out-of-memory
- Instead, exit gracefully
Resolves: rhbz1380144
* Wed Oct 11 2017 John Kacur <jkacur@redhat.com> - 2.14-3
- Add sos as a requires since this package is needed to run sosreport
Resolves: rhbz1500722
* Wed Oct 11 2017 John Kacur <jkacur@redhat.com> - 2.14-2
- Add the contents of the kernel boot command line to the summary report
Resolves: rhbz1452788
* Thu Mar 16 2017 Clark Williams <williams@redhat.com> - 2.14-1
- removed leftover import of systopology from sysinfo
* Wed Mar 15 2017 Clark Williams <williams@redhat.com> - 2.13-2
- Updated specfile to correct version and bz [1382155]
* Tue Sep 20 2016 Clark Williams <williams@rehdat.com> - 2.12-1
- handle empty environment variables SUDO_USER and USER [1312057]
* Tue Aug 30 2016 Clark Williams <williams@rehdat.com> - 2.11-1
- make sure we return non-zero for early exit from tests
* Wed Aug 3 2016 Clark Williams <williams@rehdat.com> - 2.10-1
- bumped version for RHEL 7.3 release
* Mon May 9 2016 Clark Williams <williams@redhat.com> - 2.9.1
- default cpulist for modules if only one specified [1333831]
* Tue Apr 26 2016 Clark Williams <williams@redhat.com> - 2.8.1
- add the --version option to print the rteval version
- made the --cyclictest-breaktrace option work properly [1209986]
* Fri Apr 1 2016 Clark Williams <williams@redhat.com> - 2.7.1
- treat SIGINT and SIGTERM as valid end-of-run events [1278757]
- added cpulist options to man page
* Thu Feb 11 2016 Clark Williams <williams@redhat.com> - 2.6.1
- update to make --loads-cpulist and --measurement-cpulist work [1306437]
* Thu Dec 10 2015 Clark Williams <williams@refhat.com> - 2.5-1
- stop using old numactl --cpubind argument
* Wed Dec 9 2015 Clark Williams <williams@refhat.com> - 2.4.2
- added Require of package numactl
* Tue Nov 17 2015 Clark Williams <williams@refhat.com> - 2.4.1
- rework hackbench load to not generate cross-node traffic [1282826]
* Wed Aug 12 2015 Clark Williams <williams@redhat.com> - 2.3-1
- comment out HWLatDetect module from default config [1245699]
* Wed Jun 10 2015 Clark Williams <williams@redhat.com> - 2.2-1
- add --loads-cpulist and --measurement-cpulist to allow cpu placement [1230401]
* Thu Apr 23 2015 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 2.1-8
- load default configs when no config file is specified (Jiri kastner) [1212452]
* Wed Jan 14 2015 Clark Williams <williams@redhat.com> - 2.1-7
- added requires of bzip2 to specfile [1151567]
* Thu Jan 8 2015 Clark Williams <williams@redhat.com> - 2.1-6
- cleaned up product documentation [1173315]
* Mon Nov 10 2014 Luis Claudio R. Goncalves <lgoncalv@redhat.com> - 2.1-5
- rebuild for RHEL-7.1 (1151567)
* Thu Mar 27 2014 Clark Williams <williams@redhat.com> - 2.1-4
- cherry-picked old commit to deal with installdir problem
* Wed Mar 26 2014 Clark Williams <williams@redhat.com> - 2.1-3
- added sysstat requires to specfile
* Tue Mar 12 2013 David Sommerseth <davids@redhat.com> - 2.1-2
- Migrated from libxslt-python to python-lxml
* Fri Jan 18 2013 David Sommerseth <davids@redhat.com> - 2.1-1
- Made some log lines clearer
- cyclictest: Added --cyclictest-breaktrace feature
- cyclictest: Removed --cyclictest-distance option
- cyclictest: Use a tempfile buffer for cyclictest's stdout data
- cyclictest: Report if breaktrace was triggered
- cyclictest: Make the unit test work again
- cyclictest: Only log and show statistic data when samples are collected
- Copyright updates
* Thu Jan 17 2013 David Sommerseth <davids@redhat.com> - 2.0.1-1
- Fix up type casting in the core module code
- hwlatdetect: Add some more useful debug info
- Reworked the run logic for modules - allow them to flag they won't run
- Fixed a few log messages in load modules
- Add a 30 seconds sleep before unleashing the measurement threads
* Thu Jan 10 2013 David Sommerseth <davids@redhat.com> - 2.0-3
- Separate out RTEVAL_VERSION into rteval.version, to avoid
massive BuildRequirements
* Fri Dec 21 2012 David Sommerseth <davids@redhat.com> - 2.0-2
- Split out common files into rteval-common
* Fri Dec 21 2012 David Sommerseth <davids@redhat.com> - 2.0-1
- Updated to rteval v2.0 and reworked spec file to use setup.py directly
* Tue Oct 23 2012 Clark Williams <williams@redhat.com> - 1.36-1
- deal with system not having dmidecode python module
- make sure to cast priority parameter to int
- from Raphaël Beamonte <raphael.beamonte@gmail.com>:
- Rewrite of the get_kthreads method to make it cross-distribution
- Adds getcmdpath method to use which to locate the used commands
- Rewrite of the get_services method to make it cross-distribution
* Mon Apr 2 2012 Clark Williams <williams@redhat.com> - 1.35-1
- fix thinko where SIGINT and SIGTERM handlers were commented out
* Thu Jan 12 2012 Clark Williams <williams@redhat.com> - 1.34-1
- fix missing config merge in rteval.py to pass parameters
down to cyclictest
- modify hackbench to use helper function to start process
* Sat May 14 2011 Clark Williams <williams@redhat.com> - 1.33-1
- modify hackbench cutoff to be 0.75GB/core
* Mon Aug 23 2010 Clark Williams <williams@redhat.com> - 1.32-1
- update docs
- refactor some RTEval methods to utility functions
- modify hackbench.py not to run under low memory conditions
- clean up XML generation to deal with new hackbench code
- clean up XSL code to deal with new XML 'run' attribute
- from David Sommerseth <davids@redhat.com>:
- improve CPU socket counting logic
- delay log directory creation until actually needed
- from Gowrishankar <gowrishankar.m@in.ibm.com>:
- check if the core id really exists (multithreading fix)
* Mon Jul 26 2010 Clark Williams <williams@redhat.com> - 1.31-1
- from David Sommerseth <davids@redhat.com>:
- Updated hackbench implementation to avoid overusing resources
- Don't show NUMA node information if it's missing in the summary.xml
- Show CPU cores properly
* Wed Jul 21 2010 Clark Williams <williams@redhat.com> - 1.30-1
- added code to hackbench to try to detect and ease memory pressure
* Fri Jul 16 2010 Clark Williams <williams@redhat.com> - 1.29-1
- fixed incorrect type value in kcompile.py
* Fri Jul 16 2010 Clark Williams <williams@redhat.com> - 1.28-1
- added logic to loads to adjust number of jobs based on ratio
of memory per core
* Wed Jul 14 2010 Clark Williams <williams@redhat.com> - 1.27-1
- modified hackbench to go back to using threads rather than
processes for units of work
- added memory size, number of numa nodes and run duration to the
parameter dictionary passed to all loads and cyclictest
* Tue Jul 13 2010 Clark Williams <williams@redhat.com> - 1.26-1
- modified hackbench parameters to reduce memory consumption
* Mon Jul 12 2010 Clark Williams <williams@redhat.com> - 1.25-1
- fixed cyclictest bug that caused everything to be uniprocessor
- updated source copyrights to 2010
* Fri Jul 9 2010 Clark Williams <williams@redhat.com> - 1.24-1
- modified hackbench arguments and added new parameters for
hackbench in rteval.conf
* Thu Jul 8 2010 Clark Williams <williams@redhat.com> - 1.23-1
- version bump to deal with out-of-sync cvs issue
* Thu Jul 8 2010 Clark Williams <williams@redhat.com> - 1.22-1
- merged David Sommerseth <davids@redhat.com> changes to use
hackbench from rt-tests packages rather than carry local copy
- converted all loads and cyclictest to pass __init__ parameters
in a dictionary rather than as discrete parameters
- added logging for load output
* Tue Apr 13 2010 Clark Williams <williams@redhat.com> - 1.21-1
- from Luis Claudio Goncalves <lgoncalv@redhat.com>:
- remove unecessary wait() call in cyclictest.py
- close /dev/null after using it
- call subprocess.wait() when needed
- remove delayloop code in hackbench.py
- from David Sommerseth <davids@redhat.com>:
- add SIGINT handler
- handle non-root user case
- process DMI warnings before command line arguments
- added --annotate feature to rteval
- updates to xmlrpc code
* Tue Apr 6 2010 Clark Williams <williams@redhat.com> - 1.20-1
- code fixes from Luis Claudio Goncalves <lgoncalv@redhat.com>
- from David Sommerseth <davids@redhat.com>:
- xmlrpc server updates
- cputopology.py for recording topology in xml
- added NUMA node recording for run data
- rpmlint fixes
- added start of rteval whitepaper in docs dir
* Tue Mar 16 2010 Clark Williams <williams@redhat.com> - 1.19-1
- add ability for --summarize to read tarfiles
- from David Sommerseth <davids@redhat.com>
- gather info about loaded kernel modules for XML file
- added child tracking to hackbench to prevent zombies
* Tue Feb 16 2010 Clark Williams <williams@redhat.com> - 1.18-1
- fix usage of python 2.6 features on RHEL5 (python 2.4)
* Tue Feb 16 2010 Clark Williams <williams@redhat.com> - 1.17-1
- added logic to filter non-printables from service status output
so that we have legal XML output
- added logic to hackbench.py to cleanup properly at the end
of the test
* Thu Feb 11 2010 Clark Williams <williams@redhat.com> - 1.16-1
- fix errors in show_remaining_time() introduced because
time values are floats rather than ints
* Thu Feb 11 2010 Clark Williams <williams@redhat.com> - 1.15-1
- added logic to use --numa and --smp options of new cyclictest
- added countdown report for time remaining in a run
* Tue Feb 9 2010 Clark Williams <williams@redhat.com> - 1.14-1
- David Sommerseth <davids@redhat.com>:
merged XMLReport() changes for hwcert suite
* Tue Dec 22 2009 Clark Williams <williams@redhat.com> - 1.13-1
- added cyclictest default initializers
- added sanity checks to statistics reduction code
- updated release checklist to include origin push
- updated Makefile clean and help targets
- davids updates (mainly for v7 integration):
- Add explicit sys.path directory to the python sitelib+
'/rteval'
- Send program arguments via RtEval() constructor
- Added more DMI data into the summary.xml report
- Fixed issue with not including all devices in the
OnBoardDeviceInfo tag
* Thu Dec 3 2009 David Sommerseth <davids@redhat.com> - 1.12-2
- fixed Makefile and specfile to include and install the
rteval/rteval_histogram_raw.py source file for gaining
raw access to histogram data
- Removed xmlrpc package during merge against master_ipv4 branch
* Wed Nov 25 2009 Clark Williams <williams@redhat.com> - 1.12-1
- fix incorrect reporting of measurement thread priorities
* Mon Nov 16 2009 Clark Williams <williams@redhat.com> - 1.11-5
- ensure that no double-slashes ("//") appear in the symlink
path for /usr/bin/rteval (problem with rpmdiff)
* Tue Nov 10 2009 Clark Williams <williams@redhat.com> - 1.11-4
- changed symlink back to install and tracked by %%files
* Mon Nov 9 2009 Clark Williams <williams@redhat.com> - 1.11-3
- changed symlink generation from %%post to %%posttrans
* Mon Nov 9 2009 Clark Williams <williams@redhat.com> - 1.11-2
- fixed incorrect dependency for libxslt
* Fri Nov 6 2009 Clark Williams <williams@redhat.com> - 1.11-1
- added base OS info to XML file and XSL report
- created new package rteval-loads for the load source code
* Wed Nov 4 2009 Clark Williams <williams@redhat.com> - 1.10-1
- added config file section for cyclictest and two settable
parameters, buckets and interval
* Thu Oct 29 2009 Clark Williams <williams@redhat.com> - 1.9-1
- merged davids updates:
-H option (raw histogram data)
cleaned up xsl files
fixed cpu sorting
* Mon Oct 26 2009 David Sommerseth <davids@redhat.com> - 1.8-3
- Fixed rpmlint complaints
* Mon Oct 26 2009 David Sommerseth <davids@redhat.com> - 1.8-2
- Added xmlrpc package, containing the XML-RPC mod_python modules
* Tue Oct 20 2009 Clark Williams <williams@redhat.com> - 1.8-1
- split kcompile and hackbench into sub-packages
- reworked Makefile (and specfile) install/uninstall logic
- fixed sysreport incorrect plugin option
- catch failure when running on root-squashed NFS
* Tue Oct 13 2009 Clark Williams <williams@redhat.com> - 1.7-1
- added kthread status to xml file
- merged davids changes for option processing and additions
to xml summary
* Tue Oct 13 2009 Clark Williams <williams@redhat.com> - 1.6-1
- changed stat calculation to loop less
- added methods to grab service and kthread status
* Mon Oct 12 2009 Clark Williams <williams@redhat.com> - 1.5-1
- changed cyclictest to use less memory when doing statisics
calculations
- updated debug output to use module name prefixes
- changed option processing to only process config file once
* Fri Oct 9 2009 Clark Williams <williams@redhat.com> - 1.4-1
- changed cyclictest to use histogram rather than sample array
- calcuated statistics directly from histogram
- changed sample interval to 100us
- added -a (affinity) argument to force cpu affinity for
measurement threads
* Thu Sep 24 2009 David Sommerseth <davids@redhat.com> - 1.3-3
- Cleaned up the spec file and made rpmlint happy
* Wed Sep 23 2009 David Sommerseth <davids@redhat.com> - 1.3-2
- Removed version number from /usr/share/rteval path
* Tue Sep 22 2009 Clark Williams <williams@redhat.com> - 1.3-1
- changes from davids:
* changed report code to sort by processor id
* added report submission retry logic
* added emailer class
* Fri Sep 18 2009 Clark Williams <williams@redhat.com> - 1.2-1
- added config file handling for modifying load behavior and
setting defaults
- added units in report per IBM request
* Wed Aug 26 2009 Clark Williams <williams@redhat.com> - 1.1-2
- missed a version change in rteval/rteval.py
* Wed Aug 26 2009 Clark Williams <williams@redhat.com> - 1.1-1
- modified cyclictest.py to start cyclictest threads with a
'distance' of zero, meaning they all have the same measurement
interval
* Tue Aug 25 2009 Clark Williams <williams@redhat.com> - 1.0-1
- merged davids XMLRPC fixes
- fixed --workdir option
- verion bump to 1.0
* Thu Aug 13 2009 Clark Williams <williams@redhat.com> - 0.9-2
- fixed problem with incorrect version in rteval.py
* Tue Aug 4 2009 Clark Williams <williams@redhat.com> - 0.9-1
- merged dsommers XMLRPC and database changes
- Specify minimum python-dmidecode version, which got native XML support
- Added rteval_dmi.xsl
- Fixed permission issues in /usr/share/rteval-x.xx
* Wed Jul 22 2009 Clark Williams <williams@redhat.com> - 0.8-1
- added code to capture clocksource info
- added code to copy dmesg info to report directory
- added code to display clocksource info in report
- added --summarize option to display summary of existing report
- added helpfile target to Makefile
* Thu Mar 26 2009 Clark Williams <williams@torg> - 0.7-1
- added require for python-schedutils to specfile
- added default for cyclictest output file
- added help parameter to option parser data
- renamed xml output file to summary.xml
- added routine to create tarfile of result files
* Wed Mar 18 2009 Clark Williams <williams@torg> - 0.6-6
- added code to handle binary data coming from DMI tables
* Wed Mar 18 2009 Clark Williams <williams@torg> - 0.6-5
- fixed logic for locating XSL template (williams)
- fixed another stupid typo in specfile (williams)
* Wed Mar 18 2009 Clark Williams <williams@torg> - 0.6-4
- fixed specfile to install rteval_text.xsl in /usr/share directory
* Wed Mar 18 2009 Clark Williams <williams@torg> - 0.6-3
- added Requires for libxslt-python (williams)
- fixed race condition in xmlout constructor/destructor (williams)
* Wed Mar 18 2009 Clark Williams <williams@torg> - 0.6-2
- added Requires for libxslt (williams)
- fixed stupid typo in rteval/rteval.py (williams)
* Wed Mar 18 2009 Clark Williams <williams@torg> - 0.6-1
- added xml output logic (williams, dsommers)
- added xlst template for report generator (dsommers)
- added dmi/smbios output to report (williams)
- added __del__ method to hackbench to cleanup after run (williams)
- modified to always keep run data (williams)
* Fri Feb 20 2009 Clark Williams <williams@torg> - 0.5-1
- fixed tab/space mix problem
- added report path line to report
* Fri Feb 20 2009 Clark Williams <williams@torg> - 0.4-1
- reworked report output
- handle keyboard interrupt better
- removed duration mismatch between rteval and cyclictest
* Mon Feb 2 2009 Clark Williams <williams@torg> - 0.3-1
- initial checkin
Loading…
Cancel
Save