[Feat] Refactor manager API and add some test scripts
This commit is contained in:
138
main.py
138
main.py
@ -1,93 +1,53 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from src.manager import *
|
||||
import logging
|
||||
import colorlog
|
||||
import sys
|
||||
import argparse
|
||||
import json
|
||||
from src.manager import ServiceFactory, ServiceRepository, Manager
|
||||
from src.services import DockerServiceStrategy, SystemServiceStrategy
|
||||
|
||||
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',
|
||||
}
|
||||
))
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="服务管理工具")
|
||||
subparsers = parser.add_subparsers(dest="command", required=True)
|
||||
|
||||
# 注册服务命令
|
||||
register_parser = subparsers.add_parser("register", help="注册新服务")
|
||||
register_parser.add_argument("tag", choices=["sys", "docker"], help="服务类型")
|
||||
register_parser.add_argument("name", help="服务名称")
|
||||
register_parser.add_argument("--path", help="Docker服务路径(仅docker类型需要)")
|
||||
|
||||
# 列出服务命令
|
||||
subparsers.add_parser("list", help="列出所有服务")
|
||||
|
||||
# 执行操作命令
|
||||
operate_parser = subparsers.add_parser("operate", help="执行服务操作")
|
||||
operate_parser.add_argument("index", type=int, help="服务索引")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
# 初始化仓库和管理器
|
||||
repo = ServiceRepository("services.json")
|
||||
manager = Manager(repo)
|
||||
|
||||
if args.command == "register":
|
||||
# 创建服务
|
||||
service = manager.register_service(args.tag, args.name, args.path)
|
||||
print(f"服务注册成功: {service.name}")
|
||||
|
||||
elif args.command == "list":
|
||||
# 列出所有服务
|
||||
services = manager.list_services()
|
||||
for i, service in enumerate(services):
|
||||
print(f"{i}: [{service.tag}] {service.name} {f'(path: {service.path})' if service.path else ''}")
|
||||
|
||||
elif args.command == "operate":
|
||||
# 执行服务操作
|
||||
try:
|
||||
manager.execute_service_operation(args.index)
|
||||
print("操作执行成功")
|
||||
except IndexError:
|
||||
print("错误:无效的服务索引")
|
||||
except Exception as e:
|
||||
print(f"操作失败: {str(e)}")
|
||||
|
||||
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())
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
Reference in New Issue
Block a user