5 # see license for license details
9 LOG = logging.getLogger(__name__)
12 def get_agent_dict(nodes):
15 nodes: list of flow info
16 and ever element must be a dict and kas key "agent"
17 :return : list for agent
20 agent_list = map(lambda x: x["agent"], nodes)
21 return {}.fromkeys(agent_list, False)
24 class PerfProvider(object):
25 def __init__(self, flows_info, tool_info, tester_info):
26 self._flows_info = flows_info
27 self._tool_info = tool_info
28 self._tester_info = tester_info
31 flows = self._flows_info["flows"]
32 if flows == 2 and self._flows_info["senders"][0]["agent"] == self._flows_info["senders"][1]["agent"]:
36 def get_senders(self, tool, protocol):
38 flows = self._flows_info["flows"]
39 if self._islation() and "pktgen" == tool:
41 "agent": self._flows_info["senders"][0]["agent"],
47 "time": self._tool_info[tool]["time"],
48 "threads": self._tool_info[tool]["threads"]
51 for i in range(flows):
52 sender['params']['src'].append(self._flows_info["senders"][i]['dev'])
53 sender['params']['dst'].append(self._flows_info["receivers"][i]['dev'])
56 for i in range(flows):
58 "agent": self._flows_info["senders"][i]["agent"],
61 "namespace": None if "netmap" == tool else self._flows_info["senders"][i]['dev']['namespace'],
62 "src": [self._flows_info["senders"][i]['dev']],
63 "dst": [self._flows_info["receivers"][i]['dev']],
64 "time": self._tool_info[tool]["time"],
65 "threads": self._tool_info[tool]["threads"]
71 def get_receivers(self, tool, protocol):
73 flows = self._flows_info["flows"]
74 if self._islation() and "pktgen" == tool:
76 "agent": self._flows_info["receivers"][0]["agent"],
82 result.append(receiver)
84 for i in range(flows):
86 "agent": self._flows_info["receivers"][i]["agent"],
88 "namespace": None if "netmap" == tool else self._flows_info["receivers"][i]['dev']['namespace'],
90 "dst": [self._flows_info["receivers"][i]['dev']]
93 result.append(receiver)
96 def get_watchers(self, tool):
98 for watcher in self._flows_info["watchers"]:
100 "agent": watcher["agent"],
102 "iface": watcher['dev']["iface"],
103 "namespace": None if tool in ["pktgen", "netmap"] else watcher['dev']["namespace"],
109 def get_namespaces(self, tool):
112 for watcher in self._flows_info["namespaces"]:
114 "agent": watcher["agent"],
116 "iface": watcher['dev']["iface"],
117 "namespace": watcher['dev']["namespace"] if tool not in ["pktgen", "netmap"] else None,
118 "ip": watcher['dev']["ip"] + '/24',
125 def get_cpuwatcher(self):
126 LOG.info(self._flows_info["cpu_listens"])
128 "agent": self._flows_info["cpu_listens"][0]["agent"],
135 def get_cpu_affctl(self):
136 LOG.info(self._flows_info["cpu_listens"])
138 "agent": self._flows_info["cpu_listens"][0]["agent"],
140 "policy": self._flows_info["cpu_listens"][0]["affctl"]["policy"]
145 def get_cleaners(self, tool, protocol):
146 nodes = self.get_senders(tool, protocol) + \
147 self.get_receivers(tool, protocol) + \
148 self.get_watchers(tool) + \
149 [self.get_cpuwatcher]
150 return get_agent_dict(nodes).keys()
153 def get_testers(self):
154 agents = get_agent_dict(self._flows_info["namespaces"]).keys()
160 "drivers": self._tester_info["drivers"]
166 def duration(self, tool):
167 return self._tool_info[tool]["time"]
169 def wait_balance(self, tool):
170 return self._tool_info[tool]["wait"]
174 from vstf.common.log import setup_logging
175 setup_logging(level=logging.DEBUG, log_file="/var/log/vstf/vstf-perf-provider.log", clevel=logging.INFO)
177 from vstf.controller.settings.flows_settings import FlowsSettings
178 from vstf.controller.settings.tool_settings import ToolSettings
179 from vstf.controller.settings.tester_settings import TesterSettings
181 flows_settings = FlowsSettings()
182 tool_settings = ToolSettings()
183 tester_settings = TesterSettings()
185 provider = PerfProvider(flows_settings.settings, tool_settings.settings, tester_settings.settings)
188 protocols = ['udp_bw', 'udp_lat']
192 for protocol in protocols:
194 senders = provider.get_senders(tool, protocols)
195 LOG.info(len(senders))
198 receivers = provider.get_receivers(tool, protocols)
199 LOG.info(len(receivers))
202 LOG.info(provider.get_cpuwatcher)
203 LOG.info(provider.get_watchers(tool))
204 LOG.info(provider.get_namespaces(tool))
205 LOG.info(provider.duration(tool))
208 if __name__ == '__main__':