The PerfInterval now contains a timestamp property.
The patch modifies also the IperfFlowMeasurement and StatCPUMeasurement
classes to include the timestamp in PerfInterval instances these classes
generate.
v2:
fixed passing timestamp argument to PerfInterval in IperfFlowMeasurement
Signed-off-by: Jan Tluka <jtluka(a)redhat.com>
---
.../Perf/Measurements/IperfFlowMeasurement.py | 10 ++++++----
.../Perf/Measurements/StatCPUMeasurement.py | 7 ++++---
lnst/RecipeCommon/Perf/Results.py | 7 ++++++-
3 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/lnst/RecipeCommon/Perf/Measurements/IperfFlowMeasurement.py
b/lnst/RecipeCommon/Perf/Measurements/IperfFlowMeasurement.py
index c1939875..2230a5e9 100644
--- a/lnst/RecipeCommon/Perf/Measurements/IperfFlowMeasurement.py
+++ b/lnst/RecipeCommon/Perf/Measurements/IperfFlowMeasurement.py
@@ -159,23 +159,25 @@ class IperfFlowMeasurement(BaseFlowMeasurement):
job_level=ResultLevel.NORMAL)
def _parse_job_streams(self, job):
+ job_start =
job.result["data"]["start"]["timestamp"]["timesecs"]
result = ParallelPerfResult()
if not job.passed:
- result.append(PerfInterval(0, 0, "bits"))
+ result.append(PerfInterval(0, 0, "bits", None))
else:
for i in job.result["data"]["end"]["streams"]:
result.append(SequentialPerfResult())
for interval in job.result["data"]["intervals"]:
+ interval_start = interval["sum"]["start"]
for i, stream in enumerate(interval["streams"]):
result[i].append(PerfInterval(stream["bytes"] * 8,
stream["seconds"],
- "bits"))
+ "bits", job_start +
interval_start))
return result
def _parse_job_cpu(self, job):
if not job.passed:
- return PerfInterval(0, 0, "cpu_percent")
+ return PerfInterval(0, 0, "cpu_percent", None)
else:
cpu_percent =
job.result["data"]["end"]["cpu_utilization_percent"]["host_total"]
- return PerfInterval(cpu_percent, 1, "cpu_percent")
+ return PerfInterval(cpu_percent, 1, "cpu_percent", None)
diff --git a/lnst/RecipeCommon/Perf/Measurements/StatCPUMeasurement.py
b/lnst/RecipeCommon/Perf/Measurements/StatCPUMeasurement.py
index 5dbf4045..a8e3b618 100644
--- a/lnst/RecipeCommon/Perf/Measurements/StatCPUMeasurement.py
+++ b/lnst/RecipeCommon/Perf/Measurements/StatCPUMeasurement.py
@@ -86,13 +86,14 @@ class StatCPUMeasurement(BaseCPUMeasurement):
def _parse_sample(self, sample):
result = {}
duration = sample["duration"]
+ timestamp = sample["timestamp"]
for key, value in list(sample.items()):
if key.startswith("cpu"):
- result[key] = self._create_cpu_intervals(duration, value)
+ result[key] = self._create_cpu_intervals(duration, value, timestamp)
return result
- def _create_cpu_intervals(self, duration, cpu_intervals):
+ def _create_cpu_intervals(self, duration, cpu_intervals, timestamp):
result = {}
for key, value in list(cpu_intervals.items()):
- result[key] = PerfInterval(value, duration, "time units")
+ result[key] = PerfInterval(value, duration, "time units",
timestamp)
return result
diff --git a/lnst/RecipeCommon/Perf/Results.py b/lnst/RecipeCommon/Perf/Results.py
index 2d4c9f50..61a9ef81 100644
--- a/lnst/RecipeCommon/Perf/Results.py
+++ b/lnst/RecipeCommon/Perf/Results.py
@@ -27,10 +27,11 @@ class PerfResult(PerfStatMixin):
raise NotImplementedError()
class PerfInterval(PerfResult):
- def __init__(self, value, duration, unit):
+ def __init__(self, value, duration, unit, timestamp):
self._value = value
self._duration = duration
self._unit = unit
+ self._timestamp = timestamp
@property
def value(self):
@@ -44,6 +45,10 @@ class PerfInterval(PerfResult):
def unit(self):
return self._unit
+ @property
+ def timestamp(self):
+ return self._timestamp
+
@property
def std_deviation(self):
return 0
--
2.26.2