Refactor initialization and update methods in app.py and related classes

This commit is contained in:
dertyp7
2023-12-27 16:40:09 +01:00
parent 0eb86721ff
commit c9af5893e1
3 changed files with 49 additions and 34 deletions

View File

@@ -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}')

View File

@@ -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(

View File

@@ -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')