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 from vstf.controller.settings.device_settings import DeviceSettings
14 from vstf.controller.settings.forwarding_settings import ForwardingSettings
15 from vstf.controller.settings.cpu_settings import CpuSettings
16 from vstf.controller.fabricant import Fabricant
17 from vstf.controller.settings.flows_settings import FlowsSettings
18 import vstf.common.constants as cst
20 LOG = logging.getLogger(__name__)
23 class FlowsProducer(object):
25 def __init__(self, conn, flows_settings):
26 self._perf = flows_settings
27 self._forwarding = ForwardingSettings().settings
28 self._device = DeviceSettings().settings
29 self._cpu = CpuSettings().settings
33 def get_dev(self, item):
34 agent = self._device[item[0]]["agent"]
35 devs = self._device[item[0]]["devs"][item[1]]
37 keys = ["bdf", "iface", "mac"]
44 raise Exception("error devs :%s", devs)
47 if (agent, name) not in self._devs_map:
48 query = Fabricant(agent, self._conn)
49 query.clean_all_namespace()
50 dev_info = query.get_device_verbose(identity=name)
51 if not isinstance(dev_info, dict):
52 err = "get device detail failed, agent:%s net:%s" % (
58 "bdf": dev_info["bdf"],
59 "iface": dev_info["iface"],
60 "mac": dev_info["mac"],
66 self._devs_map[(agent, name)] = dev
69 return self._devs_map[(agent, name)]
73 "agent": self._device["host"]["agent"],
74 "affctl": self._cpu["affctl"]
78 def create(self, scenario, case):
80 flows_indexes = self._forwarding[scenario]["flows"]
82 for index in flows_indexes:
84 raise Exception("error flows %s" % flows_indexes)
85 dev = self.get_dev(index)
86 flows_infos.append(dev)
88 flows_infos[0]['dev'].update(self._forwarding["head"])
89 flows_infos[-1]['dev'].update(self._forwarding["tail"])
93 actor_info = cst.CASE_ACTOR_MAP[case]
95 self._perf.clear_all()
96 senders = actor_info["senders"]
98 for sender in senders:
99 dev = flows_infos[sender]
101 self._perf.add_senders(dev)
103 receivers = actor_info["receivers"]
104 for receiver in receivers:
105 dev = flows_infos[receiver]
107 self._perf.add_receivers(dev)
109 watchers = self._forwarding[scenario]["watchers"]
110 for watcher in watchers:
111 dev = flows_infos[watcher]
113 self._perf.add_watchers(dev)
116 for namespace in namespaces:
117 dev = flows_infos[namespace]
119 self._perf.add_namespaces(dev)
121 host = self.get_host()
123 self._perf.add_cpu_listens(host)
125 self._perf.set_flows(actor_info["flows"])
130 from vstf.rpc_frame_work.rpc_producer import Server
131 from vstf.common.log import setup_logging
134 log_file="/var/log/vstf/vstf-producer.log",
137 conn = Server("192.168.188.10")
138 flow_settings = FlowsSettings()
139 flow_producer = FlowsProducer(conn, flow_settings)
142 flow_producer.create(scenario, case)
145 if __name__ == '__main__':