The align_data method creates a copy of FlowMeasurementResults and
based on the provided start and end timestamps copies only those
measurement samples that fit the timestamp interval.
v2:
- removed unnecessary _copy method
Signed-off-by: Jan Tluka <jtluka(a)redhat.com>
---
.../Perf/Measurements/BaseFlowMeasurement.py | 33 +++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/lnst/RecipeCommon/Perf/Measurements/BaseFlowMeasurement.py
b/lnst/RecipeCommon/Perf/Measurements/BaseFlowMeasurement.py
index bbf19a2e..38fa6818 100644
--- a/lnst/RecipeCommon/Perf/Measurements/BaseFlowMeasurement.py
+++ b/lnst/RecipeCommon/Perf/Measurements/BaseFlowMeasurement.py
@@ -4,6 +4,7 @@ from lnst.RecipeCommon.Perf.Measurements.MeasurementError import
MeasurementErro
from lnst.RecipeCommon.Perf.Measurements.BaseMeasurement import BaseMeasurement
from lnst.RecipeCommon.Perf.Measurements.BaseMeasurement import BaseMeasurementResults
from lnst.RecipeCommon.Perf.Results import SequentialPerfResult
+from lnst.RecipeCommon.Perf.Results import ParallelPerfResult
class Flow(object):
def __init__(self,
@@ -170,6 +171,38 @@ class FlowMeasurementResults(BaseMeasurementResults):
def end_timestamp(self):
return min([seq_result[-1].timestamp for seq_result in self.generator_results])
+ def align_data(self, start, end):
+ result_copy = FlowMeasurementResults(self.measurement, self.flow)
+
+ # NOTE: iperf reports the cpu utilization for the whole test
+ # period, not each second, so the CPU samples cannot be aligned
+ result_copy.generator_cpu_stats = self.generator_cpu_stats
+ result_copy.receiver_cpu_stats = self.receiver_cpu_stats
+
+ result_copy.generator_results = ParallelPerfResult()
+ result_copy.receiver_results = ParallelPerfResult()
+
+ for stream in self.generator_results:
+ aligned_intervals = [
+ interval
+ for interval in stream
+ if interval.timestamp >= start and interval.timestamp <= end
+ ]
+
+
result_copy.generator_results.append(SequentialPerfResult(aligned_intervals))
+
+ for stream in self.receiver_results:
+ aligned_intervals = [
+ interval
+ for interval in stream
+ if interval.timestamp >= start and interval.timestamp <= end
+ ]
+
+ result_copy.receiver_results.append(SequentialPerfResult(aligned_intervals))
+
+ return result_copy
+
+
class AggregatedFlowMeasurementResults(FlowMeasurementResults):
def __init__(self, measurement, flow):
super(FlowMeasurementResults, self).__init__(measurement)
--
2.26.2