From ab5c5e2262f01078a1a6bd8abb0109dde03966bf Mon Sep 17 00:00:00 2001 From: VIRTUALGUARD Date: Fri, 11 Jul 2025 14:49:11 +0800 Subject: [PATCH] [Fix] Fix manager handle error --- .gitignore | 1 + main.py | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/manager.py | 4 ++- test/main.py | 2 +- 4 files changed, 98 insertions(+), 2 deletions(-) create mode 100755 main.py mode change 100644 => 100755 test/main.py diff --git a/.gitignore b/.gitignore index f1ac24f..1e61c57 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .venv/ dist/ WebServicesManager.egg-info/ +__pycache__/ diff --git a/main.py b/main.py new file mode 100755 index 0000000..5ad025b --- /dev/null +++ b/main.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python3 + +from src.manager import * +import logging +import colorlog +import sys + +def initialize_logger(): + """Initialize and return a color logger.""" + handler = colorlog.StreamHandler() + handler.setFormatter(colorlog.ColoredFormatter( + '%(log_color)s%(asctime)s - %(levelname)s - %(message)s', + log_colors={ + 'DEBUG': 'cyan', + 'INFO': 'green', + 'WARNING': 'yellow', + 'ERROR': 'red', + 'CRITICAL': 'bold_red', + } + )) + + logger = colorlog.getLogger(__name__) + logger.setLevel(logging.INFO) + logger.addHandler(handler) + return logger + +def initialize_service_manager(): + """Initialize and return the service manager.""" + return Manager() + +logger = initialize_logger() +service_manager = initialize_service_manager() + +def start_menu(): + logger.info(f"=======================================") + logger.info(f"========== Services Manager ===========") + logger.info(f"=======================================") + logger.info(f"Please choose a operation to carry out:") + logger.info(f"=====> 1. Register a new service <=====") + logger.info(f"=====> 2. Manage exsist services <=====") + logger.info(f"=====> c. Count the number of services") + logger.info(f"=====> q. Quit ") + +def main_menu(): + """Display the main menu and handle user input.""" + + while True: + start_menu() + + start_choice = input("Enter your choice: ").strip() + if start_choice == '1': + service_tag = input("Please input the deploy way of service you want to register('docker' | 'sys'): ") + service_name = input("Please input the name of the service: ") + if service_tag == "docker": + service_path = input("Please input the config path of the service where 'docker-compose.yml' located: ") + service_manager.register_service(service_tag, service_name, service_path) + else: + service_manager.register_service(service_tag, service_name) + if start_choice == '2': + if not service_manager.services_list: + logger.error("No services registered.") + continue + while True: + logger.info(f"=====> Exsist Services Management <=====") + service_code = 1 + for service in service_manager.services_list: + logger.info(f"=====> {service_code}: {service._name}") + service_code += 1 + # logger.info("=====> a. Select All") + logger.info("=====> q. Quit") + + manage_choice = input("Please select a choice to carry out: ").strip() + if manage_choice == 'q': + logger.info("Exit main manager") + break + # if manage_choice == 'a': + # pass + try: + code = int(manage_choice) + if 0 <= code < len(service_manager.services_list): + service_manager.services_list[code].service_operation() + else: + logger.error("Invalid service code.") + except ValueError: + logger.error("Please enter a valid number.") + if start_choice == 'c': + service_manager.list_services() + if start_choice == 'q': + logger.info(f"Exit the manager process") + break + +if __name__ == '__main__': + sys.exit(main_menu()) diff --git a/src/manager.py b/src/manager.py index b564380..8cc20cc 100755 --- a/src/manager.py +++ b/src/manager.py @@ -72,6 +72,8 @@ class Manager: self.append_service(service_instance=service) return service + # TODO: Add the feature which can store the registered services into a JSON file. + def list_services(self) -> None: """Method use for count the num of service instances and list the names of them. @@ -80,6 +82,6 @@ class Manager: sum_of_service = 0 service_name_list = [] for services in self.services_list: - service_name_list.append(services.name) + service_name_list.append(services._name) sum_of_service += 1 logger.info(f"The manager has registered {sum_of_service} services: {', '.join(service_name_list)}") diff --git a/test/main.py b/test/main.py old mode 100644 new mode 100755 index 5ad025b..4bca067 --- a/test/main.py +++ b/test/main.py @@ -62,7 +62,7 @@ def main_menu(): continue while True: logger.info(f"=====> Exsist Services Management <=====") - service_code = 1 + service_code = 0 for service in service_manager.services_list: logger.info(f"=====> {service_code}: {service._name}") service_code += 1