1 ##############################################################################
2 # Copyright (c) 2015 Huawei Technologies Co.,Ltd and others.
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
13 LOG = logging.getLogger(__name__)
16 def get_agent_dict(nodes):
19 nodes: list of flow info
20 and ever element must be a dict and kas key "agent"
21 :return : list for agent
24 agent_list = map(lambda x: x["agent"], nodes)
25 return {}.fromkeys(agent_list, False)
28 class PerfProvider(object):
30 def __init__(self, flows_info, tool_info, tester_info):
31 self._flows_info = flows_info
32 self._tool_info = tool_info
33 self._tester_info = tester_info
36 flows = self._flows_info["flows"]
37 if flows == 2 and self._flows_info["senders"][0][
38 "agent"] == self._flows_info["senders"][1]["agent"]:
42 def get_senders(self, tool, protocol):
44 flows = self._flows_info["flows"]
45 if self._islation() and "pktgen" == tool:
47 "agent": self._flows_info["senders"][0]["agent"],
53 "time": self._tool_info[tool]["time"],
54 "threads": self._tool_info[tool]["threads"]
57 for i in range(flows):
58 sender['params']['src'].append(
59 self._flows_info["senders"][i]['dev'])
60 sender['params']['dst'].append(
61 self._flows_info["receivers"][i]['dev'])
64 for i in range(flows):
66 "agent": self._flows_info["senders"][i]["agent"],
69 "namespace": None if "netmap" == tool else self._flows_info["senders"][i]['dev']['namespace'],
71 self._flows_info["senders"][i]['dev']],
73 self._flows_info["receivers"][i]['dev']],
74 "time": self._tool_info[tool]["time"],
75 "threads": self._tool_info[tool]["threads"]}}
79 def get_receivers(self, tool, protocol):
81 flows = self._flows_info["flows"]
82 if self._islation() and "pktgen" == tool:
84 "agent": self._flows_info["receivers"][0]["agent"],
90 result.append(receiver)
92 for i in range(flows):
94 "agent": self._flows_info["receivers"][i]["agent"],
96 "namespace": None if "netmap" == tool else self._flows_info["receivers"][i]['dev']['namespace'],
99 self._flows_info["receivers"][i]['dev']]}}
100 result.append(receiver)
103 def get_watchers(self, tool):
105 for watcher in self._flows_info["watchers"]:
107 "agent": watcher["agent"],
109 "iface": watcher['dev']["iface"],
110 "namespace": None if tool in [
112 "netmap"] else watcher['dev']["namespace"],
117 def get_namespaces(self, tool):
120 for watcher in self._flows_info["namespaces"]:
122 "agent": watcher["agent"],
124 "iface": watcher['dev']["iface"],
125 "namespace": watcher['dev']["namespace"] if tool not in [
128 "ip": watcher['dev']["ip"] +
135 def get_cpuwatcher(self):
136 LOG.info(self._flows_info["cpu_listens"])
138 "agent": self._flows_info["cpu_listens"][0]["agent"],
145 def get_cpu_affctl(self):
146 LOG.info(self._flows_info["cpu_listens"])
148 "agent": self._flows_info["cpu_listens"][0]["agent"],
150 "policy": self._flows_info["cpu_listens"][0]["affctl"]["policy"]
155 def get_cleaners(self, tool, protocol):
156 nodes = self.get_senders(tool, protocol) + \
157 self.get_receivers(tool, protocol) + \
158 self.get_watchers(tool) + \
159 [self.get_cpuwatcher]
160 return get_agent_dict(nodes).keys()
163 def get_testers(self):
164 agents = get_agent_dict(self._flows_info["namespaces"]).keys()
170 "drivers": self._tester_info["drivers"]
176 def duration(self, tool):
177 return self._tool_info[tool]["time"]
179 def wait_balance(self, tool):
180 return self._tool_info[tool]["wait"]
184 from vstf.common.log import setup_logging
187 log_file="/var/log/vstf/vstf-perf-provider.log",
190 from vstf.controller.settings.flows_settings import FlowsSettings
191 from vstf.controller.settings.tool_settings import ToolSettings
192 from vstf.controller.settings.tester_settings import TesterSettings
194 flows_settings = FlowsSettings()
195 tool_settings = ToolSettings()
196 tester_settings = TesterSettings()
198 provider = PerfProvider(
199 flows_settings.settings,
200 tool_settings.settings,
201 tester_settings.settings)
204 protocols = ['udp_bw', 'udp_lat']
208 for protocol in protocols:
210 senders = provider.get_senders(tool, protocols)
211 LOG.info(len(senders))
214 receivers = provider.get_receivers(tool, protocols)
215 LOG.info(len(receivers))
218 LOG.info(provider.get_cpuwatcher)
219 LOG.info(provider.get_watchers(tool))
220 LOG.info(provider.get_namespaces(tool))
221 LOG.info(provider.duration(tool))
224 if __name__ == '__main__':