diff options
author | Kerim Gokarslan <kgokarsl@cisco.com> | 2017-10-13 17:29:58 -0700 |
---|---|---|
committer | Kerim Gokarslan <kgokarsl@cisco.com> | 2017-10-16 11:53:49 -0700 |
commit | a79debff4a6436522feebd2221865a2a6a917a58 (patch) | |
tree | e798895746a4edddc083b6e618f766d7905a7fbc /nfvbench/traffic_gen | |
parent | 211bc02b88a19153eb33f9a4f6670638bf469676 (diff) |
NFVBENCH-40 Add pylint to tox
Change-Id: Ic55a07145f27c4cfaa6df5523df3940ca4433af1
Signed-off-by: Kerim Gokarslan <kgokarsl@cisco.com>
Diffstat (limited to 'nfvbench/traffic_gen')
-rw-r--r-- | nfvbench/traffic_gen/dummy.py | 10 | ||||
-rw-r--r-- | nfvbench/traffic_gen/traffic_base.py | 44 | ||||
-rw-r--r-- | nfvbench/traffic_gen/traffic_utils.py | 18 | ||||
-rw-r--r-- | nfvbench/traffic_gen/trex.py | 34 |
4 files changed, 48 insertions, 58 deletions
diff --git a/nfvbench/traffic_gen/dummy.py b/nfvbench/traffic_gen/dummy.py index dabdc71..d8c01e9 100644 --- a/nfvbench/traffic_gen/dummy.py +++ b/nfvbench/traffic_gen/dummy.py @@ -12,11 +12,7 @@ # License for the specific language governing permissions and limitations # under the License. -from nfvbench.log import LOG - from traffic_base import AbstractTrafficGenerator -import traffic_utils as utils - class DummyTG(AbstractTrafficGenerator): @@ -50,12 +46,6 @@ class DummyTG(AbstractTrafficGenerator): def create_traffic(self, l2frame_size, rates, bidirectional, latency=True): pass - def modify_rate(self, rate, reverse): - port_index = int(reverse) - port = self.port_handle[port_index] - self.rates[port_index] = utils.to_rate_str(rate) - LOG.info('Modified traffic stream for %s, new rate=%s.' % (port, utils.to_rate_str(rate))) - def clear_streamblock(self): pass diff --git a/nfvbench/traffic_gen/traffic_base.py b/nfvbench/traffic_gen/traffic_base.py index 064b2a2..568fae2 100644 --- a/nfvbench/traffic_gen/traffic_base.py +++ b/nfvbench/traffic_gen/traffic_base.py @@ -14,76 +14,86 @@ import abc +from nfvbench.log import LOG +import traffic_utils + + class TrafficGeneratorException(Exception): pass class AbstractTrafficGenerator(object): - # src_mac (6) + dst_mac (6) + mac_type (2) + frame_check (4) = 18 l2_header_size = 18 imix_l2_sizes = [64, 594, 1518] imix_l3_sizes = [size - l2_header_size for size in imix_l2_sizes] imix_ratios = [7, 4, 1] - imix_avg_l2_size = sum(map( - lambda imix: 1.0 * imix[0] * imix[1], - zip(imix_l2_sizes, imix_ratios))) / sum(imix_ratios) + + imix_avg_l2_size = sum( + [1.0 * imix[0] * imix[1] for imix in zip(imix_l2_sizes, imix_ratios)]) / sum(imix_ratios) + + traffic_utils.imix_avg_l2_sizes = imix_avg_l2_size def __init__(self, config): self.config = config @abc.abstractmethod - def get_version(): + def get_version(self): # Must be implemented by sub classes return None @abc.abstractmethod - def init(): + def init(self): # Must be implemented by sub classes return None @abc.abstractmethod - def connect(): + def connect(self): # Must be implemented by sub classes return None @abc.abstractmethod - def config_interface(): + def config_interface(self): # Must be implemented by sub classes return None @abc.abstractmethod - def create_traffic(): + def create_traffic(self): # Must be implemented by sub classes return None - @abc.abstractmethod - def modify_traffic(): + def modify_rate(self, rate, reverse): + port_index = int(reverse) + port = self.port_handle[port_index] + self.rates[port_index] = traffic_utils.to_rate_str(rate) + LOG.info('Modified traffic stream for %s, new rate=%s.', port, + traffic_utils.to_rate_str(rate)) + + def modify_traffic(self): # Must be implemented by sub classes return None @abc.abstractmethod - def get_stats(): + def get_stats(self): # Must be implemented by sub classes return None - @abc.abstractmethod - def clear_traffic(): + def clear_traffic(self): # Must be implemented by sub classes return None @abc.abstractmethod - def start_traffic(): + def start_traffic(self): # Must be implemented by sub classes return None @abc.abstractmethod - def stop_traffic(): + def stop_traffic(self): # Must be implemented by sub classes return None @abc.abstractmethod - def cleanup(): + def cleanup(self): # Must be implemented by sub classes return None diff --git a/nfvbench/traffic_gen/traffic_utils.py b/nfvbench/traffic_gen/traffic_utils.py index 7cf44a8..e618c28 100644 --- a/nfvbench/traffic_gen/traffic_utils.py +++ b/nfvbench/traffic_gen/traffic_utils.py @@ -14,8 +14,9 @@ import bitmath -from traffic_base import AbstractTrafficGenerator +from nfvbench.utils import multiplier_map +imix_avg_l2_size = None def convert_rates(l2frame_size, rate, intf_speed): @@ -48,9 +49,8 @@ def convert_rates(l2frame_size, rate, intf_speed): def get_average_packet_size(l2frame_size): if l2frame_size.upper() == 'IMIX': - return AbstractTrafficGenerator.imix_avg_l2_size - else: - return float(l2frame_size) + return imix_avg_l2_size + return float(l2frame_size) def load_to_bps(load_percentage, intf_speed): @@ -71,15 +71,9 @@ def pps_to_bps(pps, avg_packet_size): def weighted_avg(weight, count): if sum(weight): - return sum(map(lambda x: x[0] * x[1], zip(weight, count))) / sum(weight) - else: - return float('nan') -multiplier_map = { - 'K': 1000, - 'M': 1000000, - 'G': 1000000000 -} + return sum([x[0] * x[1] for x in zip(weight, count)]) / sum(weight) + return float('nan') def parse_rate_str(rate_str): if rate_str.endswith('pps'): diff --git a/nfvbench/traffic_gen/trex.py b/nfvbench/traffic_gen/trex.py index 498ff50..23faebc 100644 --- a/nfvbench/traffic_gen/trex.py +++ b/nfvbench/traffic_gen/trex.py @@ -12,6 +12,11 @@ # License for the specific language governing permissions and limitations # under the License. +import os +import random +import time +import traceback + from collections import defaultdict from itertools import count from nfvbench.log import LOG @@ -20,14 +25,11 @@ from nfvbench.traffic_server import TRexTrafficServer from nfvbench.utils import cast_integer from nfvbench.utils import timeout from nfvbench.utils import TimeoutError -import os -import random -import time -import traceback from traffic_base import AbstractTrafficGenerator from traffic_base import TrafficGeneratorException import traffic_utils as utils +# pylint: disable=import-error from trex_stl_lib.api import CTRexVmInsFixHwCs from trex_stl_lib.api import Dot1Q from trex_stl_lib.api import Ether @@ -46,6 +48,7 @@ from trex_stl_lib.api import STLVmFlowVarRepetableRandom from trex_stl_lib.api import STLVmWrFlowVar from trex_stl_lib.api import UDP from trex_stl_lib.services.trex_stl_service_arp import STLServiceARP +# pylint: enable=import-error class TRex(AbstractTrafficGenerator): @@ -95,8 +98,7 @@ class TRex(AbstractTrafficGenerator): result[ph]['rx']['min_delay_usec'] = cast_integer( lat['total_min']) if 'total_min' in lat else float('nan') result[ph]['rx']['avg_delay_usec'] = cast_integer( - lat['average']) if 'average' in lat else float( - 'nan') + lat['average']) if 'average' in lat else float('nan') total_tx_pkts = result[0]['tx']['total_pkts'] + result[1]['tx']['total_pkts'] result["total_tx_rate"] = cast_integer(total_tx_pkts / self.config.duration_sec) return result @@ -117,7 +119,7 @@ class TRex(AbstractTrafficGenerator): def __combine_latencies(self, in_stats, port_handle): """Traverses TRex result dictionary and combines chosen latency stats.""" - if not len(self.latencies[port_handle]): + if not self.latencies[port_handle]: return {} result = defaultdict(float) @@ -268,7 +270,7 @@ class TRex(AbstractTrafficGenerator): if os.path.isfile(logpath): # Wait for TRex to finish writing error message last_size = 0 - for it in xrange(self.config.generic_retry_count): + for _ in xrange(self.config.generic_retry_count): size = os.path.getsize(logpath) if size == last_size: # probably not writing anymore @@ -347,13 +349,13 @@ class TRex(AbstractTrafficGenerator): if len(self.arps[port]) == self.config.service_chain_count: resolved += 1 - LOG.info('ARP resolved successfully for port {}'.format(port)) + LOG.info('ARP resolved successfully for port %s', port) break else: failed = [arp.get_record().dst_ip for arp in arps if arp.get_record().dst_mac is None] - LOG.info('Retrying ARP for: {} ({} / {})'.format( - failed, attempt, self.config.generic_retry_count)) + LOG.info('Retrying ARP for: %d (%d / %d)', + failed, attempt, self.config.generic_retry_count) time.sleep(self.config.generic_poll_sec) self.client.set_service_mode(ports=self.port_handle, enabled=False) @@ -396,7 +398,7 @@ class TRex(AbstractTrafficGenerator): stream_cfgs = [d.get_stream_configs(self.config.generator_config.service_chain) for d in self.config.generator_config.devices] - self.rates = map(lambda rate: utils.to_rate_str(rate), rates) + self.rates = [utils.to_rate_str(rate) for rate in rates] for ph in self.port_handle: # generate one pg_id for each direction @@ -420,13 +422,7 @@ class TRex(AbstractTrafficGenerator): for ph in self.port_handle: self.client.add_streams(self.streamblock[ph], ports=ph) - LOG.info('Created traffic stream for port %s.' % ph) - - def modify_rate(self, rate, reverse): - port_index = int(reverse) - port = self.port_handle[port_index] - self.rates[port_index] = utils.to_rate_str(rate) - LOG.info('Modified traffic stream for %s, new rate=%s.' % (port, utils.to_rate_str(rate))) + LOG.info('Created traffic stream for port %s.', ph) def clear_streamblock(self): self.streamblock = defaultdict(list) |