diff --git a/app/app.py b/app/app.py index af3c91a..02a5968 100644 --- a/app/app.py +++ b/app/app.py @@ -1,4 +1,3 @@ -import os import time from dockerHandler import DockerHandler from nginxHandler import NginxHandler @@ -26,47 +25,63 @@ def init_placeholder_servers(): starting_thread.start() +def initialize_docker_handler() -> DockerHandler: + logging.info('[INIT] initializing docker handler...') + docker_handler: DockerHandler = DockerHandler('unix://var/run/docker.sock') + logging.info('[INIT] docker handler initialized') + return docker_handler + + +def initialize_nginx_handler() -> NginxHandler: + logging.info('[INIT] initializing nginx handler...') + nginx_handler: NginxHandler = NginxHandler('/etc/nginx/nginx.conf') + return nginx_handler + + +def initialize_minecraft_server_handler(docker_handler, nginx_handler) -> MinecraftServerHandler: + logging.info('[INIT] initializing minecraft server handler...') + minecraft_server_handler: MinecraftServerHandler = MinecraftServerHandler( + docker_handler, nginx_handler) + + # Find all Minecraft servers and add them to the MinecraftServerHandler instance + for service_name in docker_handler.get_port_map().values(): + minecraft_server_handler.add_server(service_name) + + logging.info('[INIT] minecraft server handler initialized') + return minecraft_server_handler + + +def initialize_request_handlers(docker_handler, minecraft_server_handler): + logging.info('[INIT] initializing request handlers...') + # Create a RequestHandler instance for each port + for port in docker_handler.get_port_map().keys(): + logging.info(f'[INIT] creating request handler for port {port}') + request_handler: RequestHandler = RequestHandler( + int(port), docker_handler, minecraft_server_handler) + request_handler.start() + logging.info('[INIT] request handlers initialized') + + def main() -> None: try: logging.info('[INIT] initializing placeholder servers...') init_placeholder_servers() logging.info('[INIT] placeholder servers initialized') - logging.info('[INIT] initializing auto starter...') - logging.info('[INIT] initializing docker handler...') - docker_handler: DockerHandler = DockerHandler( - 'unix://var/run/docker.sock') - logging.info('[INIT] docker handler initialized') + docker_handler = initialize_docker_handler() + nginx_handler = initialize_nginx_handler() - logging.info('[INIT] initializing nginx handler...') - nginx_handler: NginxHandler = NginxHandler('/etc/nginx/nginx.conf') - - nginx_handler.update_config_file( - docker_handler) - - logging.info('[INIT] nginx handler initialized') - - logging.info('[INIT] initializing minecraft server handler...') - minecraft_server_handler: MinecraftServerHandler = MinecraftServerHandler( + minecraft_server_handler = initialize_minecraft_server_handler( docker_handler, nginx_handler) - # Find all Minecraft servers and add them to the MinecraftServerHandler instance - for service_name in docker_handler.get_port_map().values(): - minecraft_server_handler.add_server(service_name) + nginx_handler.update_config_file( + docker_handler, minecraft_server_handler.active_service_name) logging.info('[INIT] wait 20 seconds before stopping all servers...') time.sleep(20) minecraft_server_handler.stop_all_servers() - logging.info('[INIT] minecraft server handler initialized') - logging.info('[INIT] initializing request handlers...') - # Create a RequestHandler instance for each port - for port in docker_handler.get_port_map().keys(): - logging.info(f'[INIT] creating request handler for port {port}') - request_handler: RequestHandler = RequestHandler( - int(port), docker_handler, minecraft_server_handler) - request_handler.start() - logging.info('[INIT] request handlers initialized') + initialize_request_handlers(docker_handler, minecraft_server_handler) except Exception as e: logging.error(f'An error occurred: {e}') diff --git a/app/minecraftServerHandler.py b/app/minecraftServerHandler.py index ea9d693..58b9774 100644 --- a/app/minecraftServerHandler.py +++ b/app/minecraftServerHandler.py @@ -13,7 +13,7 @@ class MinecraftServerHandler: self.docker_handler: DockerHandler = docker_handler self.nginx_handler: NginxHandler = nginx_handler - self.active_service_name: str | None = None + self.active_service_name: str = "" logging.info( '[MinecraftServerHandler] minecraft server handler initialized') @@ -45,8 +45,9 @@ class MinecraftServerHandler: server.start() logging.info( f'[MinecraftServerHandler] started server {service_name}') + self.active_service_name = service_name self.nginx_handler.update_config_file( - self.docker_handler) + self.docker_handler, self.active_service_name) self.nginx_handler.print_config() else: logging.info( diff --git a/app/nginxHandler.py b/app/nginxHandler.py index b82fb2c..551cd72 100644 --- a/app/nginxHandler.py +++ b/app/nginxHandler.py @@ -32,7 +32,7 @@ class NginxHandler: logging.info('========================================') logging.info('[NginxHandler] nginx config file printed') - def update_config_file(self, docker_handler: DockerHandler) -> None: + def update_config_file(self, docker_handler: DockerHandler, active_service_name: str) -> None: logging.info('[NginxHandler] updating nginx config file...') self.stop() port_map: Dict[str, str] = docker_handler.get_port_map() @@ -56,15 +56,14 @@ class NginxHandler: # Example for the nginx-example.conf file is in the repo root directory if isinstance(port_map, dict): for port in port_map: - ip = docker_handler.get_ip_by_service_name(port_map[port]) - nginx_conf.write( f' # docker service {port_map[port]} on port {port}\n') nginx_conf.write(f' upstream upstream_{port} {{\n') - if ip == "": + if port_map[port] != active_service_name: nginx_conf.write(f' server 127.0.0.1:{port};\n') else: + ip = docker_handler.get_ip_by_service_name(port_map[port]) nginx_conf.write(f' server {ip}:25565;\n') nginx_conf.write( f' server 127.0.0.1:{port} backup;\n')