mirror of
https://github.com/BOSWatch/BW3-Core.git
synced 2026-03-03 03:23:55 +01:00
some refactoring
This commit is contained in:
parent
7f55be4823
commit
f487bfc104
|
|
@ -23,17 +23,17 @@ logging.debug("- %s loaded", __name__)
|
||||||
class ConfigYAML:
|
class ConfigYAML:
|
||||||
|
|
||||||
def __init__(self, config=None):
|
def __init__(self, config=None):
|
||||||
self.__config = config
|
self._config = config
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
for item in self.__config:
|
for item in self._config:
|
||||||
if type(item) is list or type(item) is dict:
|
if type(item) is list or type(item) is dict:
|
||||||
yield ConfigYAML(item)
|
yield ConfigYAML(item)
|
||||||
else:
|
else:
|
||||||
yield item
|
yield item
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return str(self.__config)
|
return str(self._config)
|
||||||
|
|
||||||
def loadConfigFile(self, configPath):
|
def loadConfigFile(self, configPath):
|
||||||
"""!loads a given configuration
|
"""!loads a given configuration
|
||||||
|
|
@ -44,14 +44,14 @@ class ConfigYAML:
|
||||||
try:
|
try:
|
||||||
with open(configPath) as file:
|
with open(configPath) as file:
|
||||||
# use safe_load instead load
|
# use safe_load instead load
|
||||||
self.__config = yaml.safe_load(file)
|
self._config = yaml.safe_load(file)
|
||||||
return True
|
return True
|
||||||
except: # pragma: no cover
|
except: # pragma: no cover
|
||||||
logging.exception("cannot load config file")
|
logging.exception("cannot load config file")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def get(self, *args, default=None):
|
def get(self, *args, default=None):
|
||||||
tmp = self.__config
|
tmp = self._config
|
||||||
try:
|
try:
|
||||||
for arg in args:
|
for arg in args:
|
||||||
tmp = tmp.get(arg, default)
|
tmp = tmp.get(arg, default)
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ import time
|
||||||
logging.debug("- %s loaded", __name__)
|
logging.debug("- %s loaded", __name__)
|
||||||
|
|
||||||
|
|
||||||
class ThreadedTCPRequestHandler(socketserver.ThreadingMixIn, socketserver.BaseRequestHandler):
|
class _ThreadedTCPRequestHandler(socketserver.ThreadingMixIn, socketserver.BaseRequestHandler):
|
||||||
"""!ThreadedTCPRequestHandler class for our TCPServer class."""
|
"""!ThreadedTCPRequestHandler class for our TCPServer class."""
|
||||||
|
|
||||||
def handle(self):
|
def handle(self):
|
||||||
|
|
@ -60,7 +60,7 @@ class ThreadedTCPRequestHandler(socketserver.ThreadingMixIn, socketserver.BaseRe
|
||||||
logging.info("Client disconnected: %s", self.client_address[0])
|
logging.info("Client disconnected: %s", self.client_address[0])
|
||||||
|
|
||||||
|
|
||||||
class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
|
class _ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
|
||||||
"""!ThreadedTCPServer class for our TCPServer class."""
|
"""!ThreadedTCPServer class for our TCPServer class."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
@ -98,7 +98,7 @@ class TCPServer:
|
||||||
@return True or False"""
|
@return True or False"""
|
||||||
try:
|
try:
|
||||||
if not self.isRunning:
|
if not self.isRunning:
|
||||||
self._server = ThreadedTCPServer(("", port), ThreadedTCPRequestHandler)
|
self._server = _ThreadedTCPServer(("", port), _ThreadedTCPRequestHandler)
|
||||||
self._server.timeout = self._timeout
|
self._server.timeout = self._timeout
|
||||||
self._server.alarmQueue = self._alarmQueue
|
self._server.alarmQueue = self._alarmQueue
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,56 +24,57 @@ logging.debug("- %s loaded", __name__)
|
||||||
|
|
||||||
class _Router:
|
class _Router:
|
||||||
def __init__(self, name):
|
def __init__(self, name):
|
||||||
self.__name = name
|
self._name = name
|
||||||
self.__route = []
|
self._route = []
|
||||||
logging.debug("[%s] new router", self.__name)
|
logging.debug("[%s] new router", self._name)
|
||||||
|
|
||||||
def addRoute(self, route):
|
def addRoute(self, route):
|
||||||
logging.debug("[%s] add route: %s", self.__name, route)
|
logging.debug("[%s] add route: %s", self._name, route)
|
||||||
self.__route.append(route)
|
self._route.append(route)
|
||||||
|
|
||||||
def runRouter(self, bwPacket):
|
def runRouter(self, bwPacket):
|
||||||
logging.debug("[%s] started", self.__name)
|
logging.debug("[%s] started", self._name)
|
||||||
for routeCall in self.__route:
|
for routeCall in self._route:
|
||||||
logging.debug("[%s] -> run route: %s", self.__name, routeCall)
|
logging.debug("[%s] -> run route: %s", self._name, routeCall)
|
||||||
bwPacket_tmp = routeCall(copy.deepcopy(bwPacket)) # copy bwPacket to prevent edit the original
|
bwPacket_tmp = routeCall(copy.deepcopy(bwPacket)) # copy bwPacket to prevent edit the original
|
||||||
|
|
||||||
if bwPacket_tmp is None: # returning None doesnt change the bwPacket
|
if bwPacket_tmp is None: # returning None doesnt change the bwPacket
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if bwPacket_tmp is False: # returning False stops the router immediately
|
if bwPacket_tmp is False: # returning False stops the router immediately
|
||||||
logging.debug("[%s] stopped", self.__name)
|
logging.debug("[%s] stopped", self._name)
|
||||||
break
|
break
|
||||||
|
|
||||||
bwPacket = bwPacket_tmp
|
bwPacket = bwPacket_tmp
|
||||||
logging.debug("[%s] <- bwPacket returned: %s", self.__name, bwPacket)
|
logging.debug("[%s] <- bwPacket returned: %s", self._name, bwPacket)
|
||||||
logging.debug("[%s] ended", self.__name)
|
logging.debug("[%s] ended", self._name)
|
||||||
return bwPacket
|
return bwPacket
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def name(self):
|
def name(self):
|
||||||
return self.__name
|
return self._name
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def route(self):
|
def route(self):
|
||||||
return self.__route
|
return self._route
|
||||||
|
|
||||||
|
|
||||||
class RouterManager:
|
class RouterManager:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.__routerDict = {}
|
self._routerDict = {}
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
del self.__routerDict
|
# destroy all routers (also destroys all instances of modules/plugins)
|
||||||
|
del self._routerDict
|
||||||
|
|
||||||
def buildRouter(self, config):
|
def buildRouter(self, config):
|
||||||
self.__routerDict = {} # all routers and loaded modules/plugins would be unloaded
|
self._routerDict = {} # all routers and instances of modules/plugins would be destroyed
|
||||||
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"))
|
self._routerDict[router.get("name")] = _Router(router.get("name"))
|
||||||
|
|
||||||
for router in config.get("router"):
|
for router in config.get("router"):
|
||||||
for route in router.get("route"):
|
for route in router.get("route"):
|
||||||
|
|
@ -90,15 +91,15 @@ class RouterManager:
|
||||||
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)
|
self._routerDict[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)
|
self._routerDict[routerName].addRoute(loadedClass._run)
|
||||||
|
|
||||||
elif routeType == "router":
|
elif routeType == "router":
|
||||||
self.__routerDict[routerName].addRoute(self.__routerDict[routeName].runRouter)
|
self._routerDict[routerName].addRoute(self._routerDict[routeName].runRouter)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
logging.warning("unknown type: %s", routeType)
|
logging.warning("unknown type: %s", routeType)
|
||||||
|
|
@ -110,12 +111,15 @@ class RouterManager:
|
||||||
self._showRouterRoute()
|
self._showRouterRoute()
|
||||||
|
|
||||||
def runRouter(self, routerList, bwPacket):
|
def runRouter(self, routerList, bwPacket):
|
||||||
for router in routerList:
|
if type(routerList) is str: # convert single string name to list
|
||||||
if router in self.__routerDict:
|
routerList = [routerList]
|
||||||
self.__routerDict[router].runRouter(bwPacket)
|
|
||||||
|
for routerName in routerList:
|
||||||
|
if routerName in self._routerDict:
|
||||||
|
self._routerDict[routerName].runRouter(bwPacket)
|
||||||
|
|
||||||
def _showRouterRoute(self):
|
def _showRouterRoute(self):
|
||||||
for name, router in self.__routerDict.items():
|
for name, router in self._routerDict.items():
|
||||||
logging.debug("Route for %s", name)
|
logging.debug("Route for %s", name)
|
||||||
for route in router.route:
|
for routePoint in router.route:
|
||||||
logging.debug(" | %s", route)
|
logging.debug(" | %s", routePoint)
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ from boswatch.configYaml import ConfigYAML
|
||||||
from boswatch.packet import Packet
|
from boswatch.packet import Packet
|
||||||
from boswatch.router import RouterManager
|
from boswatch.router import RouterManager
|
||||||
|
|
||||||
|
|
||||||
config = ConfigYAML()
|
config = ConfigYAML()
|
||||||
config.loadConfigFile("config/server.yaml")
|
config.loadConfigFile("config/server.yaml")
|
||||||
|
|
||||||
|
|
@ -20,6 +19,9 @@ routMan.buildRouter(config)
|
||||||
print()
|
print()
|
||||||
routMan.runRouter(config.get("alarmRouter"), bwPack)
|
routMan.runRouter(config.get("alarmRouter"), bwPack)
|
||||||
|
|
||||||
|
print()
|
||||||
|
routMan.runRouter("Router 2", bwPack)
|
||||||
|
|
||||||
|
|
||||||
print()
|
print()
|
||||||
exit()
|
exit()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue