83 lines
2.3 KiB
Python
83 lines
2.3 KiB
Python
|
#!/usr/bin/env python
|
|||
|
# -*- coding: utf-8 -*-
|
|||
|
|
|||
|
"""
|
|||
|
任务实例ID修复脚本
|
|||
|
为所有现有的任务实例记录生成并设置instance_id
|
|||
|
|
|||
|
用法:
|
|||
|
python scripts/fix_instance_ids.py
|
|||
|
"""
|
|||
|
|
|||
|
import os
|
|||
|
import sys
|
|||
|
import logging
|
|||
|
import uuid
|
|||
|
from sqlalchemy import text
|
|||
|
|
|||
|
# 添加项目根目录到系统路径
|
|||
|
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
|
|||
|
|
|||
|
# 导入项目模块
|
|||
|
from data.session import get_db
|
|||
|
from data.models.task_instance import TaskInstance
|
|||
|
|
|||
|
# 设置日志
|
|||
|
logging.basicConfig(
|
|||
|
level=logging.INFO,
|
|||
|
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
|||
|
handlers=[
|
|||
|
logging.StreamHandler(sys.stdout), # 输出到控制台
|
|||
|
logging.FileHandler("fix_instance_ids.log") # 输出到文件
|
|||
|
]
|
|||
|
)
|
|||
|
logger = logging.getLogger("fix_instance_ids")
|
|||
|
|
|||
|
def fix_instance_ids():
|
|||
|
"""为所有现有的任务实例记录生成并设置instance_id"""
|
|||
|
try:
|
|||
|
# 获取数据库会话
|
|||
|
db = next(get_db())
|
|||
|
|
|||
|
# 查询所有没有instance_id的任务实例记录
|
|||
|
instances = db.query(TaskInstance).filter(
|
|||
|
(TaskInstance.instance_id == None) |
|
|||
|
(TaskInstance.instance_id == '')
|
|||
|
).all()
|
|||
|
|
|||
|
logger.info(f"发现 {len(instances)} 条没有instance_id的任务实例记录")
|
|||
|
|
|||
|
# 为每条记录生成并设置instance_id
|
|||
|
for instance in instances:
|
|||
|
instance_id = str(uuid.uuid4())
|
|||
|
instance.instance_id = instance_id
|
|||
|
logger.info(f"为任务实例 ID={instance.id} 设置instance_id={instance_id}")
|
|||
|
|
|||
|
# 提交更改
|
|||
|
db.commit()
|
|||
|
logger.info("所有任务实例记录的instance_id已更新")
|
|||
|
|
|||
|
return True
|
|||
|
except Exception as e:
|
|||
|
logger.error(f"修复任务实例ID失败: {str(e)}")
|
|||
|
if 'db' in locals():
|
|||
|
db.rollback()
|
|||
|
return False
|
|||
|
|
|||
|
def main():
|
|||
|
"""主函数"""
|
|||
|
logger.info("开始修复任务实例ID...")
|
|||
|
|
|||
|
# 修复任务实例ID
|
|||
|
success = fix_instance_ids()
|
|||
|
|
|||
|
if success:
|
|||
|
logger.info("任务实例ID修复成功!")
|
|||
|
else:
|
|||
|
logger.error("任务实例ID修复失败!")
|
|||
|
|
|||
|
# 根据修复结果设置退出码
|
|||
|
sys.exit(0 if success else 1)
|
|||
|
|
|||
|
if __name__ == "__main__":
|
|||
|
main()
|