On Thu, Apr 04, 2019 at 04:27:46PM +0200, olichtne(a)redhat.com wrote:
From: Ondrej Lichtner <olichtne(a)redhat.com>
These will be useful when generating descriptions of the measurements
for either the database of when printing human readable outputs.
Signed-off-by: Ondrej Lichtner <olichtne(a)redhat.com>
---
.../Perf/Measurements/BaseMeasurement.py | 8 ++++++
.../Perf/Measurements/IperfFlowMeasurement.py | 25 +++++++++++++++++++
.../Perf/Measurements/StatCPUMeasurement.py | 4 +++
3 files changed, 37 insertions(+)
diff --git a/lnst/RecipeCommon/Perf/Measurements/BaseMeasurement.py
b/lnst/RecipeCommon/Perf/Measurements/BaseMeasurement.py
index 5c51b9a..f119879 100644
--- a/lnst/RecipeCommon/Perf/Measurements/BaseMeasurement.py
+++ b/lnst/RecipeCommon/Perf/Measurements/BaseMeasurement.py
@@ -2,6 +2,14 @@ class BaseMeasurement(object):
def __init__(self, conf):
self._conf = conf
+ @property
+ def name(self):
+ return self.__class__.__name__
+
+ @property
+ def version(self):
+ raise NotImplementedError()
+
@property
def conf(self):
return self._conf
diff --git a/lnst/RecipeCommon/Perf/Measurements/IperfFlowMeasurement.py
b/lnst/RecipeCommon/Perf/Measurements/IperfFlowMeasurement.py
index d3c02ec..76b9e6f 100644
--- a/lnst/RecipeCommon/Perf/Measurements/IperfFlowMeasurement.py
+++ b/lnst/RecipeCommon/Perf/Measurements/IperfFlowMeasurement.py
@@ -1,3 +1,4 @@
+import re
import time
from lnst.Common.IpAddress import ipaddress
@@ -15,11 +16,35 @@ from lnst.RecipeCommon.Perf.Measurements.BaseFlowMeasurement import
FlowMeasurem
from lnst.Tests.Iperf import IperfClient, IperfServer
class IperfFlowMeasurement(BaseFlowMeasurement):
+ _MEASUREMENT_VERSION = 1
+
def __init__(self, *args):
super(IperfFlowMeasurement, self).__init__(*args)
self._running_measurements = []
self._finished_measurements = []
+ self._hosts_versions = {}
+
+ @property
+ def version(self):
+ if not self._hosts_versions:
+ for flow in self._conf:
+ if flow.receiver not in self._hosts_versions:
+ self._hosts_versions[flow.receiver] =
self._get_host_iperf_version(flow.receiver)
+ if flow.generator not in self._hosts_versions:
+ self._hosts_versions[flow.generator] =
self._get_host_iperf_version(flow.generator)
+
+ return {"measurement_version": self._MEASUREMENT_VERSION,
+ "hosts_iperf_versions": self._hosts_versions}
^
I have a whitespace error here...
> +
> + def _get_host_iperf_version(self, host):
> + version_job = host.run("iperf3 --version")
> + if version_job.passed:
> + match = re.match(r"iperf (.+?) .*", version_job.stdout)
> + if match:
> + return match.group(1)
> + return None
> +
> def start(self):
> if len(self._running_measurements) > 0:
> raise MeasurementError("Measurement already running!")
> diff --git a/lnst/RecipeCommon/Perf/Measurements/StatCPUMeasurement.py
b/lnst/RecipeCommon/Perf/Measurements/StatCPUMeasurement.py
> index e21ac43..f74f47f 100644
> --- a/lnst/RecipeCommon/Perf/Measurements/StatCPUMeasurement.py
> +++ b/lnst/RecipeCommon/Perf/Measurements/StatCPUMeasurement.py
> @@ -31,6 +31,10 @@ class StatCPUMeasurement(BaseCPUMeasurement):
> self._running_measurements = []
> self._finished_measurements = []
>
> + @property
> + def version(self):
> + return "1"
> +
> def start(self):
> jobs = []
> for host in self._conf:
> --
> 2.21.0
>