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):
29 def __init__(self, flows_info, tool_info, tester_info):
30 self._flows_info = flows_info
31 self._tool_info = tool_info
32 self._tester_info = tester_info
35 flows = self._flows_info["flows"]
36 if flows == 2 and self._flows_info["senders"][0]["agent"] == self._flows_info["senders"][1]["agent"]:
40 def get_senders(self, tool, protocol):
42 flows = self._flows_info["flows"]
43 if self._islation() and "pktgen" == tool:
45 "agent": self._flows_info["senders"][0]["agent"],
51 "time": self._tool_info[tool]["time"],
52 "threads": self._tool_info[tool]["threads"]
55 for i in range(flows):
56 sender['params']['src'].append(self._flows_info["senders"][i]['dev'])
57 sender['params']['dst'].append(self._flows_info["receivers"][i]['dev'])
60 for i in range(flows):
62 "agent": self._flows_info["senders"][i]["agent"],
65 "namespace": None if "netmap" == tool else self._flows_info["senders"][i]['dev']['namespace'],
66 "src": [self._flows_info["senders"][i]['dev']],
67 "dst": [self._flows_info["receivers"][i]['dev']],
68 "time": self._tool_info[tool]["time"],
69 "threads": self._tool_info[tool]["threads"]
75 def get_receivers(self, tool, protocol):
77 flows = self._flows_info["flows"]
78 if self._islation() and "pktgen" == tool:
80 "agent": self._flows_info["receivers"][0]["agent"],
86 result.append(receiver)
88 for i in range(flows):
90 "agent": self._flows_info["receivers"][i]["agent"],
92 "namespace": None if "netmap" == tool else self._flows_info["receivers"][i]['dev']['namespace'],
94 "dst": [self._flows_info["receivers"][i]['dev']]
97 result.append(receiver)
100 def get_watchers(self, tool):
102 for watcher in self._flows_info["watchers"]:
104 "agent": watcher["agent"],
106 "iface": watcher['dev']["iface"],
107 "namespace": None if tool in ["pktgen", "netmap"] else watcher['dev']["namespace"],
113 def get_namespaces(self, tool):
116 for watcher in self._flows_info["namespaces"]:
118 "agent": watcher["agent"],
120 "iface": watcher['dev']["iface"],
121 "namespace": watcher['dev']["namespace"] if tool not in ["pktgen", "netmap"] else None,
122 "ip": watcher['dev']["ip"] + '/24',
129 def get_cpuwatcher(self):
130 LOG.info(self._flows_info["cpu_listens"])
132 "agent": self._flows_info["cpu_listens"][0]["agent"],
139 def get_cpu_affctl(self):
140 LOG.info(self._flows_info["cpu_listens"])
142 "agent": self._flows_info["cpu_listens"][0]["agent"],
144 "policy": self._flows_info["cpu_listens"][0]["affctl"]["policy"]
149 def get_cleaners(self, tool, protocol):
150 nodes = self.get_senders(tool, protocol) + \
151 self.get_receivers(tool, protocol) + \
152 self.get_watchers(tool) + \
153 [self.get_cpuwatcher]
154 return get_agent_dict(nodes).keys()
157 def get_testers(self):
158 agents = get_agent_dict(self._flows_info["namespaces"]).keys()
164 "drivers": self._tester_info["drivers"]
170 def duration(self, tool):
171 return self._tool_info[tool]["time"]
173 def wait_balance(self, tool):
174 return self._tool_info[tool]["wait"]
178 from vstf.common.log import setup_logging
179 setup_logging(level=logging.DEBUG, log_file="/var/log/vstf/vstf-perf-provider.log", clevel=logging.INFO)
181 from vstf.controller.settings.flows_settings import FlowsSettings
182 from vstf.controller.settings.tool_settings import ToolSettings
183 from vstf.controller.settings.tester_settings import TesterSettings
185 flows_settings = FlowsSettings()
186 tool_settings = ToolSettings()
187 tester_settings = TesterSettings()
189 provider = PerfProvider(flows_settings.settings, tool_settings.settings, tester_settings.settings)
192 protocols = ['udp_bw', 'udp_lat']
196 for protocol in protocols:
198 senders = provider.get_senders(tool, protocols)
199 LOG.info(len(senders))
202 receivers = provider.get_receivers(tool, protocols)
203 LOG.info(len(receivers))
206 LOG.info(provider.get_cpuwatcher)
207 LOG.info(provider.get_watchers(tool))
208 LOG.info(provider.get_namespaces(tool))
209 LOG.info(provider.duration(tool))
212 if __name__ == '__main__':