class NFVBenchSummarizer(Summarizer):
"""Summarize nfvbench json result."""
- ndr_pdr_header = [
- ('-', Formatter.fixed),
- ('L2 Frame Size', Formatter.standard),
- ('Rate (fwd+rev)', Formatter.bits),
- ('Rate (fwd+rev)', Formatter.suffix(' pps')),
- ('Avg Drop Rate', Formatter.suffix('%')),
- ('Avg Latency (usec)', Formatter.standard),
- ('Min Latency (usec)', Formatter.standard),
- ('Max Latency (usec)', Formatter.standard)
- ]
-
- single_run_header = [
- ('L2 Frame Size', Formatter.standard),
- ('Drop Rate', Formatter.suffix('%')),
- ('Avg Latency (usec)', Formatter.standard),
- ('Min Latency (usec)', Formatter.standard),
- ('Max Latency (usec)', Formatter.standard)
- ]
-
- config_header = [
- ('Direction', Formatter.standard),
- ('Requested TX Rate (bps)', Formatter.bits),
- ('Actual TX Rate (bps)', Formatter.bits),
- ('RX Rate (bps)', Formatter.bits),
- ('Requested TX Rate (pps)', Formatter.suffix(' pps')),
- ('Actual TX Rate (pps)', Formatter.suffix(' pps')),
- ('RX Rate (pps)', Formatter.suffix(' pps'))
- ]
-
direction_keys = ['direction-forward', 'direction-reverse', 'direction-total']
direction_names = ['Forward', 'Reverse', 'Total']
self.record_data = None
self.sender = sender
+ self.ndr_pdr_header = [
+ ('-', Formatter.fixed),
+ ('L2 Frame Size', Formatter.standard),
+ ('Rate (fwd+rev)', Formatter.bits),
+ ('Rate (fwd+rev)', Formatter.suffix(' pps')),
+ ('Avg Drop Rate', Formatter.suffix('%')),
+ ('Avg Latency (usec)', Formatter.standard),
+ ('Min Latency (usec)', Formatter.standard),
+ ('Max Latency (usec)', Formatter.standard)
+ ]
+
+ self.single_run_header = [
+ ('L2 Frame Size', Formatter.standard),
+ ('Drop Rate', Formatter.suffix('%')),
+ ('Avg Latency (usec)', Formatter.standard),
+ ('Min Latency (usec)', Formatter.standard),
+ ('Max Latency (usec)', Formatter.standard)
+ ]
+
+ self.config_header = [
+ ('Direction', Formatter.standard),
+ ('Requested TX Rate (bps)', Formatter.bits),
+ ('Actual TX Rate (bps)', Formatter.bits),
+ ('RX Rate (bps)', Formatter.bits),
+ ('Requested TX Rate (pps)', Formatter.suffix(' pps')),
+ ('Actual TX Rate (pps)', Formatter.suffix(' pps')),
+ ('RX Rate (pps)', Formatter.suffix(' pps'))
+ ]
+
# add percentiles headers if hdrh enabled
if not self.config.disable_hdrh:
for percentile in self.config.lat_percentiles:
- self.ndr_pdr_header.append(str(percentile) + ' %ile lat.', Formatter.standard)
- self.single_run_header.append(str(percentile) + ' %ile lat.', Formatter.standard)
+ # 'append' expects a single parameter => double parentheses
+ self.ndr_pdr_header.append((str(percentile) + ' %ile lat.', Formatter.standard))
+ self.single_run_header.append((str(percentile) + ' %ile lat.', Formatter.standard))
+
+ if self.config.periodic_gratuitous_arp:
+ self.direction_keys.insert(2, 'garp-direction-total')
+ self.direction_names.insert(2, 'Gratuitous ARP')
+
# if sender is available initialize record
if self.sender:
self.__record_init()
data['lat_percentile'] = {}
for percentile in self.config.lat_percentiles:
if add_key:
- data['lat_percentile_' + str(percentile)] = lat_percentile[percentile]
+ try:
+ data['lat_percentile_' + str(percentile)] = lat_percentile[percentile]
+ except TypeError:
+ data['lat_percentile_' + str(percentile)] = "n/a"
else:
- data.append(lat_percentile[percentile])
+ try:
+ data.append(lat_percentile[percentile])
+ except TypeError:
+ data.append("n/a")
def __get_config_table(self, run_config, frame_size):
config_table = Table(self.config_header)
lat_map['lat_' + str(percentile) + '_percentile'] = \
str(percentile) + ' %ile lat.'
- for key in lat_map:
- header.append(lat_map[key], Formatter.standard)
+ for lat_value in lat_map.values():
+ # 'append' expects a single parameter => double parentheses
+ header.append((lat_value, Formatter.standard))
table = Table(header)
for chain in sorted(list(chains.keys()), key=str):
row.append(Formatter.standard(
chains[chain][lat_key][percentile]))
else:
- for percentile in self.config.lat_percentiles:
+ for _ in self.config.lat_percentiles:
row.append('n/a')
table.add_row(row)
return table
run_specific_data['pdr'] = data['pdr']
run_specific_data['pdr']['drop_limit'] = self.config['measurement']['PDR']
del data['pdr']
- for key in run_specific_data:
+ for data_value in run_specific_data.values():
data_to_send = data.copy()
- data_to_send.update(run_specific_data[key])
+ data_to_send.update(data_value)
self.sender.record_send(data_to_send)
self.__record_init()