mirror of
https://github.com/BOSWatch/BW3-Core.git
synced 2025-12-06 07:12:04 +01:00
improve error handling in router building
This commit is contained in:
parent
f487bfc104
commit
4ac4bc5faa
|
|
@ -67,16 +67,24 @@ class RouterManager:
|
||||||
# destroy all routers (also destroys all instances of modules/plugins)
|
# destroy all routers (also destroys all instances of modules/plugins)
|
||||||
del self._routerDict
|
del self._routerDict
|
||||||
|
|
||||||
def buildRouter(self, config):
|
def buildRouter(self, config): # todo validation
|
||||||
self._routerDict = {} # all routers and instances of modules/plugins would be destroyed
|
self._routerDict = {} # all routers and instances of modules/plugins would be destroyed
|
||||||
|
routerDict_tmp = {}
|
||||||
logging.debug("build routers")
|
logging.debug("build routers")
|
||||||
|
|
||||||
# first we have to init all routers
|
# first we have to init all routers
|
||||||
# because a router can be a valid target and we need his reference
|
# because a router can be a valid target and we need his reference
|
||||||
for router in config.get("router"):
|
for router in config.get("router"):
|
||||||
self._routerDict[router.get("name")] = _Router(router.get("name"))
|
if router.get("name") in self._routerDict:
|
||||||
|
logging.error("duplicated router name: %s", router.get("name"))
|
||||||
|
return False
|
||||||
|
routerDict_tmp[router.get("name")] = _Router(router.get("name"))
|
||||||
|
|
||||||
for router in config.get("router"):
|
for router in config.get("router"):
|
||||||
|
if router.get("name") is None or router.get("route") is None:
|
||||||
|
logging.error("name or route not found in router: %s", router)
|
||||||
|
return False
|
||||||
|
|
||||||
for route in router.get("route"):
|
for route in router.get("route"):
|
||||||
|
|
||||||
routerName = router.get("name")
|
routerName = router.get("name")
|
||||||
|
|
@ -84,31 +92,35 @@ class RouterManager:
|
||||||
routeName = route.get("name")
|
routeName = route.get("name")
|
||||||
|
|
||||||
if routeType is None or routeName is None:
|
if routeType is None or routeName is None:
|
||||||
logging.error("type or name error in config: %s", route)
|
logging.error("type or name not found in route: %s", route)
|
||||||
continue
|
return False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if routeType == "plugin":
|
if routeType == "plugin":
|
||||||
importedFile = importlib.import_module(routeType + "." + routeName)
|
importedFile = importlib.import_module(routeType + "." + routeName)
|
||||||
loadedClass = importedFile.BoswatchPlugin(route.get("config"))
|
loadedClass = importedFile.BoswatchPlugin(route.get("config"))
|
||||||
self._routerDict[routerName].addRoute(loadedClass._run)
|
routerDict_tmp[routerName].addRoute(loadedClass._run)
|
||||||
|
|
||||||
elif routeType == "module":
|
elif routeType == "module":
|
||||||
importedFile = importlib.import_module(routeType + "." + routeName)
|
importedFile = importlib.import_module(routeType + "." + routeName)
|
||||||
loadedClass = importedFile.BoswatchModule(route.get("config"))
|
loadedClass = importedFile.BoswatchModule(route.get("config"))
|
||||||
self._routerDict[routerName].addRoute(loadedClass._run)
|
routerDict_tmp[routerName].addRoute(loadedClass._run)
|
||||||
|
|
||||||
elif routeType == "router":
|
elif routeType == "router":
|
||||||
self._routerDict[routerName].addRoute(self._routerDict[routeName].runRouter)
|
routerDict_tmp[routerName].addRoute(routerDict_tmp[routeName].runRouter)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
logging.warning("unknown type: %s", routeType)
|
logging.error("unknown type '%s' in %s", routeType, route)
|
||||||
|
return False
|
||||||
|
|
||||||
except ModuleNotFoundError:
|
except ModuleNotFoundError:
|
||||||
logging.error("%s not found: %s", route.get("type"), route.get("name"))
|
logging.error("%s not found: %s", route.get("type"), route.get("name"))
|
||||||
|
return False
|
||||||
|
|
||||||
logging.debug("finished building routers")
|
logging.debug("finished building routers")
|
||||||
|
self._routerDict = routerDict_tmp
|
||||||
self._showRouterRoute()
|
self._showRouterRoute()
|
||||||
|
return True
|
||||||
|
|
||||||
def runRouter(self, routerList, bwPacket):
|
def runRouter(self, routerList, bwPacket):
|
||||||
if type(routerList) is str: # convert single string name to list
|
if type(routerList) is str: # convert single string name to list
|
||||||
|
|
|
||||||
|
|
@ -17,25 +17,22 @@ alarmRouter:
|
||||||
- Test
|
- Test
|
||||||
|
|
||||||
router:
|
router:
|
||||||
|
- name: Router 1
|
||||||
- name: Router 1
|
route:
|
||||||
route:
|
- type: module
|
||||||
- type: module
|
name: template_module
|
||||||
name: template_module
|
config:
|
||||||
config:
|
maxEntry: 30
|
||||||
maxEntry: 30
|
ignoreTime: 10
|
||||||
ignoreTime: 10
|
checkMsg: no
|
||||||
checkMsg: no
|
- type: router
|
||||||
- type: router
|
name: Router 2
|
||||||
name: Router 2
|
- type: plugin
|
||||||
- type: plugin
|
name: template_plugin
|
||||||
name: template_plugin
|
config:
|
||||||
config:
|
user: test
|
||||||
user: test
|
pass: test
|
||||||
pass: test
|
- name: Router 2
|
||||||
db: test
|
route:
|
||||||
|
- type: module
|
||||||
- name: Router 2
|
name: template_module
|
||||||
route:
|
|
||||||
- type: module
|
|
||||||
name: template_module
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue