X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=yardstick%2Fnetwork_services%2Fvnf_generic%2Fvnf%2Ftg_ixload.py;h=e0fc47dbf77c822f362d20b283f6134e30284af2;hb=eb9e5bea682f610383cf238820c8044ae66f2a3e;hp=c15f7b954e0b4bcb041fe94078a1e8f94a58220a;hpb=c0af9d0667c5653e6a1eba08c8b53664dce865f8;p=yardstick.git diff --git a/yardstick/network_services/vnf_generic/vnf/tg_ixload.py b/yardstick/network_services/vnf_generic/vnf/tg_ixload.py index c15f7b954..e0fc47dbf 100644 --- a/yardstick/network_services/vnf_generic/vnf/tg_ixload.py +++ b/yardstick/network_services/vnf_generic/vnf/tg_ixload.py @@ -12,22 +12,19 @@ # See the License for the specific language governing permissions and # limitations under the License. -from __future__ import absolute_import +import collections import csv import glob import logging import os import shutil +import subprocess -from collections import OrderedDict -from subprocess import call - -import six - -from yardstick.common.utils import makedirs +from yardstick.common import utils from yardstick.network_services.vnf_generic.vnf.sample_vnf import SampleVNFTrafficGen from yardstick.network_services.vnf_generic.vnf.sample_vnf import ClientResourceHelper + LOG = logging.getLogger(__name__) VNF_PATH = os.path.dirname(os.path.realpath(__file__)) @@ -46,7 +43,7 @@ IXLOAD_CONFIG_TEMPLATE = '''\ }, "remote_server": "%s", "result_dir": "%s", - "ixload_cfg": '"C:/Results/%s" + "ixload_cfg": "C:/Results/%s" }''' IXLOAD_CMD = "{ixloadpy} {http_ixload} {args}" @@ -66,7 +63,7 @@ class IxLoadResourceHelper(ClientResourceHelper): RESULTS_MOUNT = "/mnt/Results" - KPI_LIST = OrderedDict(( + KPI_LIST = collections.OrderedDict(( ('http_throughput', 'HTTP Total Throughput (Kbps)'), ('simulated_users', 'HTTP Simulated Users'), ('concurrent_connections', 'HTTP Concurrent Connections'), @@ -76,8 +73,10 @@ class IxLoadResourceHelper(ClientResourceHelper): def __init__(self, setup_helper): super(IxLoadResourceHelper, self).__init__(setup_helper) - self.result = OrderedDict((key, ResourceDataHelper()) for key in self.KPI_LIST) + self.result = collections.OrderedDict((key, ResourceDataHelper()) + for key in self.KPI_LIST) self.resource_file_name = '' + self.data = None def parse_csv_read(self, reader): for row in reader: @@ -91,23 +90,32 @@ class IxLoadResourceHelper(ClientResourceHelper): self.result[key].append(value) def setup(self): - # TODO: fixupt scenario_helper to hanlde ixia - self.resource_file_name = str(self.scenario_helper.scenario_cfg['ixia_profile']) - makedirs(self.RESULTS_MOUNT) + # NOTE: fixup scenario_helper to hanlde ixia + self.resource_file_name = \ + utils.find_relative_file( + self.scenario_helper.scenario_cfg['ixia_profile'], + self.scenario_helper.scenario_cfg["task_path"]) + utils.makedirs(self.RESULTS_MOUNT) cmd = MOUNT_CMD.format(self.vnfd_helper.mgmt_interface, self) LOG.debug(cmd) if not os.path.ismount(self.RESULTS_MOUNT): - call(cmd, shell=True) + subprocess.call(cmd, shell=True) shutil.rmtree(self.RESULTS_MOUNT, ignore_errors=True) - makedirs(self.RESULTS_MOUNT) + utils.makedirs(self.RESULTS_MOUNT) shutil.copy(self.resource_file_name, self.RESULTS_MOUNT) def make_aggregates(self): return {key_right: self.result[key_left].get_aggregates() for key_left, key_right in self.KPI_LIST.items()} + def collect_kpi(self): + if self.data: + self._result.update(self.data) + LOG.info("Collect %s KPIs %s", self.RESOURCE_WORD, self._result) + return self._result + def log(self): for key in self.KPI_LIST: LOG.debug(self.result[key]) @@ -115,15 +123,14 @@ class IxLoadResourceHelper(ClientResourceHelper): class IxLoadTrafficGen(SampleVNFTrafficGen): - def __init__(self, name, vnfd, setup_env_helper_type=None, resource_helper_type=None): + def __init__(self, name, vnfd, task_id, setup_env_helper_type=None, + resource_helper_type=None): if resource_helper_type is None: resource_helper_type = IxLoadResourceHelper - super(IxLoadTrafficGen, self).__init__(name, vnfd, setup_env_helper_type, - resource_helper_type) + super(IxLoadTrafficGen, self).__init__( + name, vnfd, task_id, setup_env_helper_type, resource_helper_type) self._result = {} - self.done = False - self.data = None def run_traffic(self, traffic_profile): ports = [] @@ -131,7 +138,7 @@ class IxLoadTrafficGen(SampleVNFTrafficGen): for interface in self.vnfd_helper.interfaces: vpci_list = interface['virtual-interface']["vpci"].split(":") card = vpci_list[0] - ports.append(vpci_list[1]) + ports.append(str(vpci_list[1])) for csv_file in glob.iglob(self.ssh_helper.join_bin_path('*.csv')): os.unlink(csv_file) @@ -143,34 +150,27 @@ class IxLoadTrafficGen(SampleVNFTrafficGen): os.path.basename(self.resource_helper.resource_file_name)) http_ixload_path = os.path.join(VNF_PATH, "../../traffic_profile") + cmd = IXLOAD_CMD.format( ixloadpy=os.path.join(ixia_config["py_bin_path"], "ixloadpython"), http_ixload=os.path.join(http_ixload_path, "http_ixload.py"), args="'%s'" % ixload_config) LOG.debug(cmd) - call(cmd, shell=True) + subprocess.call(cmd, shell=True) with open(self.ssh_helper.join_bin_path("ixLoad_HTTP_Client.csv")) as csv_file: lines = csv_file.readlines()[10:] - with open(self.ssh_helper.join_bin_path("http_result.csv"), 'wb+') as result_file: - result_file.writelines(six.text_type(lines[:-1])) + result_file.writelines(lines[:-1]) result_file.flush() result_file.seek(0) reader = csv.DictReader(result_file) self.resource_helper.parse_csv_read(reader) self.resource_helper.log() - self.data = self.resource_helper.make_aggregates() - - def listen_traffic(self, traffic_profile): - pass - - def instantiate(self, scenario_cfg, context_cfg): - super(IxLoadTrafficGen, self).instantiate(scenario_cfg, context_cfg) - self.done = False + self.resource_helper.data = self.resource_helper.make_aggregates() def terminate(self): - call(["pkill", "-9", "http_ixload.py"]) + subprocess.call(["pkill", "-9", "http_ixload.py"]) super(IxLoadTrafficGen, self).terminate()