优化任务调度说明
This commit is contained in:
@@ -0,0 +1,190 @@
|
||||
import argparse
|
||||
from datetime import datetime
|
||||
from system_management.scheduler.task_scheduler import TaskScheduler
|
||||
from system_management.scheduler.task_scheduler import TaskManager
|
||||
from config import Config
|
||||
from utils.logger import CrossPlatformLog
|
||||
|
||||
# 初始化日志
|
||||
log = CrossPlatformLog.get_logger("TaskManagement")
|
||||
|
||||
|
||||
def main():
|
||||
# 初始化配置和组件
|
||||
scheduler = TaskScheduler(Config.MYSQL_CONFIG)
|
||||
manager = TaskManager(scheduler)
|
||||
|
||||
# 解析命令行参数
|
||||
parser = argparse.ArgumentParser(description="任务管理工具")
|
||||
subparsers = parser.add_subparsers(dest="command", help="可用命令")
|
||||
|
||||
# 列出任务
|
||||
list_parser = subparsers.add_parser("list", help="列出所有任务")
|
||||
list_parser.add_argument("--active-only", action="store_true", help="只显示活跃任务")
|
||||
|
||||
# 查看任务详情
|
||||
show_parser = subparsers.add_parser("show", help="显示任务详情")
|
||||
show_parser.add_argument("task_id", type=int, help="任务ID")
|
||||
|
||||
# 更新任务
|
||||
update_parser = subparsers.add_parser("update", help="更新任务属性")
|
||||
update_parser.add_argument("task_id", type=int, help="任务ID")
|
||||
update_parser.add_argument("--name", help="任务名称")
|
||||
update_parser.add_argument("--type", help="任务类型")
|
||||
update_parser.add_argument("--module", help="模块路径")
|
||||
update_parser.add_argument("--cron", help="Cron表达式")
|
||||
update_parser.add_argument("--timezone", help="时区")
|
||||
|
||||
# 启用/禁用任务
|
||||
toggle_parser = subparsers.add_parser("toggle", help="启用/禁用任务")
|
||||
toggle_parser.add_argument("task_id", type=int, help="任务ID")
|
||||
toggle_parser.add_argument("--activate", action="store_true", help="启用任务")
|
||||
toggle_parser.add_argument("--deactivate", action="store_true", help="禁用任务")
|
||||
|
||||
# 删除任务
|
||||
delete_parser = subparsers.add_parser("delete", help="删除任务")
|
||||
delete_parser.add_argument("task_id", type=int, help="任务ID")
|
||||
|
||||
# 手动执行任务
|
||||
run_parser = subparsers.add_parser("run", help="手动执行任务")
|
||||
run_parser.add_argument("task_id", type=int, help="任务ID")
|
||||
|
||||
# 添加任务
|
||||
add_parser = subparsers.add_parser("add", help="添加新任务")
|
||||
add_parser.add_argument("--name", required=True, help="任务名称")
|
||||
add_parser.add_argument("--type", required=True, help="任务类型")
|
||||
add_parser.add_argument("--module", required=True, help="模块路径")
|
||||
add_parser.add_argument("--cron", required=True, help="Cron表达式")
|
||||
add_parser.add_argument("--timezone", default="Asia/Shanghai", help="时区")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
# 执行相应命令
|
||||
if args.command == "list":
|
||||
try:
|
||||
tasks = manager.get_all_tasks(args.active_only)
|
||||
manager.print_task_table(tasks)
|
||||
log.info(f"列出任务完成,共{len(tasks)}个任务")
|
||||
except Exception as e:
|
||||
log.error(f"列出任务失败: {str(e)}", exc_info=True)
|
||||
|
||||
elif args.command == "show":
|
||||
try:
|
||||
task = manager.get_task_by_id(args.task_id)
|
||||
if task:
|
||||
print("\n===== 任务详情 =====")
|
||||
for key, value in task.items():
|
||||
print(f"{key}: {value}")
|
||||
print("====================")
|
||||
log.info(f"显示任务详情成功,任务ID: {args.task_id}")
|
||||
else:
|
||||
log.warning(f"未找到任务ID: {args.task_id}")
|
||||
print(f"任务ID {args.task_id} 不存在")
|
||||
except Exception as e:
|
||||
log.error(f"显示任务详情失败,任务ID: {args.task_id}", exc_info=True)
|
||||
|
||||
elif args.command == "update":
|
||||
try:
|
||||
updates = {}
|
||||
if args.name:
|
||||
updates['task_name'] = args.name
|
||||
if args.type:
|
||||
updates['task_type'] = args.type
|
||||
if args.module:
|
||||
updates['module_path'] = args.module
|
||||
if args.cron:
|
||||
updates['cron_expression'] = args.cron
|
||||
if args.timezone:
|
||||
updates['time_zone'] = args.timezone
|
||||
|
||||
if not updates:
|
||||
log.warning("未提供任何更新字段")
|
||||
print("请至少指定一个更新字段")
|
||||
return
|
||||
|
||||
if manager.update_task(args.task_id, updates):
|
||||
log.info(f"任务ID {args.task_id} 更新成功")
|
||||
print(f"任务ID {args.task_id} 更新成功")
|
||||
else:
|
||||
log.warning(f"任务ID {args.task_id} 更新失败")
|
||||
print(f"任务ID {args.task_id} 更新失败")
|
||||
except Exception as e:
|
||||
log.error(f"更新任务失败,任务ID: {args.task_id}", exc_info=True)
|
||||
|
||||
elif args.command == "toggle":
|
||||
try:
|
||||
if args.activate and args.deactivate:
|
||||
log.warning("不能同时指定 --activate 和 --deactivate")
|
||||
print("不能同时指定 --activate 和 --deactivate")
|
||||
return
|
||||
if not args.activate and not args.deactivate:
|
||||
log.warning("请指定 --activate 或 --deactivate")
|
||||
print("请指定 --activate 或 --deactivate")
|
||||
return
|
||||
|
||||
if args.activate:
|
||||
success = manager.toggle_task_status(args.task_id, True)
|
||||
action = "启用"
|
||||
else:
|
||||
success = manager.toggle_task_status(args.task_id, False)
|
||||
action = "禁用"
|
||||
|
||||
if success:
|
||||
log.info(f"任务ID {args.task_id} {action}成功")
|
||||
print(f"任务ID {args.task_id} {action}成功")
|
||||
else:
|
||||
log.warning(f"任务ID {args.task_id} {action}失败")
|
||||
print(f"任务ID {args.task_id} {action}失败")
|
||||
except Exception as e:
|
||||
log.error(f"切换任务状态失败,任务ID: {args.task_id}", exc_info=True)
|
||||
|
||||
elif args.command == "delete":
|
||||
try:
|
||||
confirm = input(f"确定要删除任务ID {args.task_id} 吗? (y/n) ")
|
||||
if confirm.lower() == 'y':
|
||||
if manager.delete_task(args.task_id):
|
||||
log.info(f"任务ID {args.task_id} 删除成功")
|
||||
print(f"任务ID {args.task_id} 删除成功")
|
||||
else:
|
||||
log.warning(f"任务ID {args.task_id} 删除失败")
|
||||
print(f"任务ID {args.task_id} 删除失败")
|
||||
else:
|
||||
log.info(f"用户取消删除任务ID {args.task_id}")
|
||||
print("操作已取消")
|
||||
except Exception as e:
|
||||
log.error(f"删除任务失败,任务ID: {args.task_id}", exc_info=True)
|
||||
|
||||
elif args.command == "run":
|
||||
try:
|
||||
log.info(f"开始手动执行任务ID {args.task_id}")
|
||||
print(f"正在手动执行任务ID {args.task_id}...")
|
||||
if manager.run_task_manually(args.task_id):
|
||||
log.info(f"任务ID {args.task_id} 执行成功")
|
||||
print(f"任务ID {args.task_id} 执行成功")
|
||||
else:
|
||||
log.warning(f"任务ID {args.task_id} 执行失败")
|
||||
print(f"任务ID {args.task_id} 执行失败")
|
||||
except Exception as e:
|
||||
log.error(f"手动执行任务失败,任务ID: {args.task_id}", exc_info=True)
|
||||
|
||||
elif args.command == "add":
|
||||
try:
|
||||
task_id = scheduler.add_task(
|
||||
task_name=args.name,
|
||||
task_type=args.type,
|
||||
module_path=args.module,
|
||||
cron_expression=args.cron,
|
||||
time_zone=args.timezone
|
||||
)
|
||||
log.info(f"新任务添加成功,ID: {task_id}")
|
||||
print(f"新任务添加成功,ID: {task_id}")
|
||||
except Exception as e:
|
||||
log.error(f"添加任务失败: {str(e)}", exc_info=True)
|
||||
print(f"添加任务失败: {str(e)}")
|
||||
|
||||
else:
|
||||
parser.print_help()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user