import time from apscheduler.schedulers.background import BackgroundScheduler from utils.logger import logger from config.settings import YAML_OUTPUT_PATH,SCHEDULE_EXPORT, SCHEDULE_DELETE from core.get_vm_snapshots import get_all_vms from core.data_exporter import create_excel_report, export_yaml from core.remove_snapshots import load_old_snapshots, remove_snapshot def export_files(): """导出Excel和Yaml文件的函数""" logger.info("🔍 开始收集VM和快照信息...") vms = get_all_vms() # 主函数入口,获取虚拟机信息 # 导出Excel报表 logger.info("📝 开始导出Excel报表...") old_snapshots = create_excel_report(vms) # 生成Excel报告并获取旧快照 # 导出Yaml文件 logger.info("📝 开始导出 Yaml 文件...") export_yaml(old_snapshots) logger.info("========== Excel和Yaml文件导出完成 ==========") def delete_old_snapshots(): """删除旧快照的函数""" logger.info("🗑️ 开始删除过旧快照...") old_snapshots = load_old_snapshots(YAML_OUTPUT_PATH) remove_snapshot(old_snapshots) logger.info("========== VM快照清理任务执行完成 ==========") def main(): """主执行函数""" export_conf = SCHEDULE_EXPORT # 从配置读取导出任务时间 delete_conf = SCHEDULE_DELETE # 从配置读取删除任务时间 scheduler = BackgroundScheduler() # 创建调度器 # 1. 添加导出数据任务 scheduler.add_job(export_files, # 要执行的函数 'cron', # 触发器类型 day_of_week=export_conf['day_of_week'], hour=export_conf['hour'], minute=export_conf['minute'], second=export_conf.get('second', 0), id='export_files', # 任务唯一ID name='导出Excel和YAML' # 任务名称 ) logger.info(f"✓ 导出任务已设置: 每周 {export_conf['day_of_week']} {export_conf['hour']:02d}:{export_conf['minute']:02d}") # 2. 添加删除任务 scheduler.add_job( delete_old_snapshots, # 要执行的函数 'cron', day_of_week=delete_conf['day_of_week'], hour=delete_conf['hour'], minute=delete_conf['minute'], second=delete_conf.get('second', 0), id='delete_snapshots', name='删除旧快照' ) logger.info(f"✓ 删除任务已设置: 每周 {delete_conf['day_of_week']} {delete_conf['hour']:02d}:{delete_conf['minute']:02d}") # 启动调度器 scheduler.start() logger.info("调度器已启动,等待执行任务...") try: # 保持主程序运行 while True: time.sleep(1) except (KeyboardInterrupt, SystemExit): logger.info("正在关闭调度器...") scheduler.shutdown() logger.info("调度器已关闭") if __name__ == "__main__": main()