83 lines
2.8 KiB
Python
83 lines
2.8 KiB
Python
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()
|
|
|