Initialize Routers from given config file.
39 def buildRouters(self, config):
40 r"""!Initialize Routers from given config file
41
42 @param config: instance of ConfigYaml class
43 @return True or False"""
44 self.config = config
45 self._routerDict = {}
46 routerDict_tmp = {}
47 logging.debug("build routers")
48
49
50
51 for router in config.get("router"):
52 if router.get("name") is None or router.get("route") is None:
53 logging.error("name or route not found in router: %s", router)
54 return False
55 if router.get("name") in self._routerDict:
56 logging.error("duplicated router name: %s", router.get("name"))
57 return False
58 routerDict_tmp[router.get("name")] = Router(router.get("name"))
59
60 for router in config.get("router"):
61 routerName = router.get("name")
62
63 for route in router.get("route"):
64 routeType = route.get("type")
65 routeRes = route.get("res")
66 routeName = route.get("name", default=routeRes)
67
68 routeConfig = route.get("config", default=ConfigYAML())
69
70 if routeType is None or routeRes is None:
71 logging.error("type or name not found in route: %s", route)
72 return False
73
74 try:
75 if routeType == "plugin":
76 importedFile = importlib.import_module(routeType + "." + routeRes)
77 loadedClass = importedFile.BoswatchPlugin(routeConfig)
78 routerDict_tmp[routerName].addRoute(Route(routeName,
79 loadedClass._run,
80 loadedClass._getStatistics,
81 loadedClass._cleanup))
82
83 elif routeType == "module":
84 importedFile = importlib.import_module(routeType + "." + routeRes)
85 loadedClass = importedFile.BoswatchModule(routeConfig)
86 routerDict_tmp[routerName].addRoute(Route(routeName,
87 loadedClass._run,
88 loadedClass._getStatistics,
89 loadedClass._cleanup))
90
91 elif routeType == "router":
92 routerDict_tmp[routerName].addRoute(Route(routeName, routerDict_tmp[routeRes].runRouter))
93
94 else:
95 logging.error("unknown type '%s' in %s", routeType, route)
96 return False
97
98 except ModuleNotFoundError:
99 logging.exception("%s not found: %s", route.get("type"), route.get("res"))
100 return False
101
102 logging.debug("finished building routers")
103 self._routerDict = routerDict_tmp
104 self._showRouterRoute()
105 return True
106