diff options
-rw-r--r-- | TODO | 5 | ||||
-rw-r--r-- | rteval.spec | 5 | ||||
-rw-r--r-- | rteval/hackbench.py | 2 | ||||
-rw-r--r-- | rteval/rteval.py | 69 | ||||
-rw-r--r-- | rteval/rtevalclient.py | 3 | ||||
-rw-r--r-- | server/rtevaldb.py | 24 | ||||
-rw-r--r-- | server/xmlrpc_API1.py | 4 |
7 files changed, 89 insertions, 23 deletions
@@ -19,5 +19,8 @@ - AMQP latencytest/perftest (over loopback) - bonnie/bonnie++ - iozone + - KVM running guest OS - +4. Add an option to run 'perf record' while a run is in progress. This is + mainly a diagnostic option to debug *why* something is performing + poorly. diff --git a/rteval.spec b/rteval.spec index 6b1c4d0..949f840 100644 --- a/rteval.spec +++ b/rteval.spec @@ -2,7 +2,7 @@ %{!?python_ver: %define python_ver %(%{__python} -c "import sys ; print sys.version[:3]")} Name: rteval -Version: 1.32 +Version: 1.33 Release: 1%{?dist} Summary: Utility to evaluate system suitability for RT Linux @@ -71,6 +71,9 @@ rm -rf $RPM_BUILD_ROOT /usr/bin/rteval %changelog +* 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 diff --git a/rteval/hackbench.py b/rteval/hackbench.py index c088072..42a6ca7 100644 --- a/rteval/hackbench.py +++ b/rteval/hackbench.py @@ -56,7 +56,7 @@ class Hackbench(load.Load): elif units == 'TB': mem = mem * 1024 ratio = float(mem) / float(self.num_cpus) - if ratio >= 1.0: + if ratio >= 0.75: mult = float(self.params.setdefault('jobspercore', 2)) else: print "hackbench: low memory system (%f GB/core)! Not running\n" % ratio diff --git a/rteval/rteval.py b/rteval/rteval.py index 540f719..aa920b1 100644 --- a/rteval/rteval.py +++ b/rteval/rteval.py @@ -74,7 +74,7 @@ def sigterm_handler(signum, frame): class RtEval(object): def __init__(self, cmdargs): - self.version = "1.32" + self.version = "1.33" self.load_modules = [] self.workdir = os.getcwd() self.reportdir = os.getcwd() @@ -471,30 +471,59 @@ class RtEval(object): while rl != '' : rl = route.readline() splt = rl.split("\t") - if len(splt) > 2 and splt[2] != '00000000': # Only catch default route + # Only catch default route + if len(splt) > 2 and splt[2] != '00000000' and splt[1] == '00000000': defgw4 = splt[0] break route.close() - # Get lists over all devices, remove loopback device - ifdevs = ethtool.get_active_devices() - ifdevs.remove('lo') - ifdevs.sort() - # Make an interface tag for each device found - for dev in ifdevs: - self.xmlreport.openblock('interface', - {'device': dev, - 'hwaddr': ethtool.get_hwaddr(dev)} - ) - # Protcol configurations - self.xmlreport.openblock('IPv4', - {'ipaddr': ethtool.get_ipaddr(dev), - 'netmask': ethtool.get_netmask(dev), - 'defaultgw': (defgw4 == dev) and '1' or '0'} - ) - self.xmlreport.closeblock() - self.xmlreport.closeblock() + 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 cmp(dev.device,'lo') == 0: + continue + + self.xmlreport.openblock('interface', + {'device': dev.device, + 'hwaddr': dev.mac_address} + ) + + # Protcol configurations + if dev.ipv4_address: + self.xmlreport.openblock('IPv4', + {'ipaddr': dev.ipv4_address, + 'netmask': dev.ipv4_netmask, + 'broadcast': dev.ipv4_broadcast, + 'defaultgw': (defgw4 == dev.device) and '1' or '0'} + ) + self.xmlreport.closeblock() + + for ip6 in dev.get_ipv6_addresses(): + self.xmlreport.openblock('IPv6', + {'ipaddr': ip6.address, + 'netmask': ip6.netmask, + 'scope': ip6.scope} + ) + self.xmlreport.closeblock() + self.xmlreport.closeblock() + 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: + self.xmlreport.openblock('interface', + {'device': dev, + 'hwaddr': ethtool.get_hwaddr(dev)} + ) + self.xmlreport.openblock('IPv4', + {'ipaddr': ethtool.get_ipaddr(dev), + 'netmask': ethtool.get_netmask(dev), + 'defaultgw': (defgw4 == dev) and '1' or '0'} + ) + self.xmlreport.closeblock() + self.xmlreport.closeblock() self.xmlreport.closeblock() self.xmlreport.openblock('loads', {'load_average':str(accum / samples)}) diff --git a/rteval/rtevalclient.py b/rteval/rtevalclient.py index b8bf8cd..190958b 100644 --- a/rteval/rtevalclient.py +++ b/rteval/rtevalclient.py @@ -46,6 +46,9 @@ class rtevalclient: def Hello(self): return self.srv.Hello(self.hostname) + def DatabaseStatus(self): + return self.srv.DatabaseStatus() + def SendReport(self, xmldoc): if xmldoc.type != 'document_xml': raise Exception, "Input is not XML document" diff --git a/server/rtevaldb.py b/server/rtevaldb.py index d8453c9..7a0ccaf 100644 --- a/server/rtevaldb.py +++ b/server/rtevaldb.py @@ -48,3 +48,27 @@ def register_submission(config, clientid, filename, debug=False, noaction=False) dbc.COMMIT() return res[0] +def database_status(config, debug=False, noaction=False): + dbc = Database(host=config.db_server, port=config.db_port, database=config.database, + user=config.db_username, password=config.db_password, + debug=debug, noaction=noaction) + if not dbc: + return {"status": "No connection to pgsql://%s:%s/%s" % (config.db_server, + config.db_port, + config.database)} + + res = dbc.SELECT('rtevalruns', + ["to_char(CURRENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS') AS server_time", + "max(rterid) AS last_rterid", + "max(submid) AS last_submid"] + ) + if len(res) != 3: + return {"status": "Could not query database pgsql://%s:%s/%s" % (config.db_server, + config.db_port, + config.database)} + return {"status": "OK", + "server_time": res['records'][0][0], + "last_rterid": res['records'][0][1], + "last_submid": res['records'][0][2] + } + diff --git a/server/xmlrpc_API1.py b/server/xmlrpc_API1.py index e874b5c..71e23d6 100644 --- a/server/xmlrpc_API1.py +++ b/server/xmlrpc_API1.py @@ -110,3 +110,7 @@ class XMLRPC_API1(): return {"greeting": "Hello %s" % clientid, "server": platform.node(), "APIversion": self.apiversion} + + + def DatabaseStatus(self): + return rtevaldb.database_status(self.config) |