"""定时任务相关模型""" from datetime import datetime from sqlalchemy import Column, BigInteger, Integer, String, Text, Enum, SmallInteger, TIMESTAMP, DateTime, JSON, Boolean from ..database import Base class ScheduledTask(Base): """定时任务表""" __tablename__ = "platform_scheduled_tasks" id = Column(Integer, primary_key=True, autoincrement=True) tenant_id = Column(String(50)) task_name = Column(String(100), nullable=False) task_desc = Column(String(500)) # 调度配置 schedule_type = Column(Enum('simple', 'cron'), nullable=False, default='simple') time_points = Column(JSON) # JSON数组 ["08:00", "12:00"] cron_expression = Column(String(100)) timezone = Column(String(50), default='Asia/Shanghai') # 执行类型 execution_type = Column(Enum('webhook', 'script'), nullable=False, default='script') # Webhook配置 webhook_url = Column(String(500)) # 脚本配置 script_content = Column(Text) script_deps = Column(Text) # 脚本依赖 # 输入参数 input_params = Column(JSON) # JSON格式 # 重试配置 retry_count = Column(Integer, default=0) retry_interval = Column(Integer, default=60) # 告警配置 alert_on_failure = Column(Boolean, default=False) alert_webhook = Column(String(500)) # 状态 is_enabled = Column(Boolean, default=True) last_run_at = Column(DateTime) last_run_status = Column(Enum('success', 'failed', 'running')) last_run_message = Column(Text) created_at = Column(DateTime, default=datetime.now) updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now) class TaskLog(Base): """任务执行日志""" __tablename__ = "platform_task_logs" id = Column(BigInteger, primary_key=True, autoincrement=True) task_id = Column(Integer, nullable=False) tenant_id = Column(String(50)) trace_id = Column(String(100)) status = Column(Enum('running', 'success', 'failed'), nullable=False) started_at = Column(DateTime, nullable=False) finished_at = Column(DateTime) duration_ms = Column(Integer) output = Column(Text) error = Column(Text) retry_count = Column(Integer, default=0) created_at = Column(TIMESTAMP, default=datetime.now) class ScriptVar(Base): """脚本变量存储""" __tablename__ = "platform_script_vars" id = Column(Integer, primary_key=True, autoincrement=True) task_id = Column(Integer, nullable=False) tenant_id = Column(String(50)) var_key = Column(String(100), nullable=False) var_value = Column(Text) # JSON格式 created_at = Column(TIMESTAMP, default=datetime.now) updated_at = Column(TIMESTAMP, default=datetime.now, onupdate=datetime.now) class Secret(Base): """密钥管理""" __tablename__ = "platform_secrets" id = Column(Integer, primary_key=True, autoincrement=True) tenant_id = Column(String(50)) # NULL为全局 secret_key = Column(String(100), nullable=False) secret_value = Column(Text, nullable=False) description = Column(String(255)) created_at = Column(TIMESTAMP, default=datetime.now) updated_at = Column(TIMESTAMP, default=datetime.now, onupdate=datetime.now)