Files
bttoxin-pipeline/backend/app/models/job.py

51 lines
1.8 KiB
Python

"""任务模型"""
from sqlalchemy import Column, String, Integer, DateTime, JSON, Enum, Text
from sqlalchemy.sql import func
import enum
from ..database import Base
class JobStatus(str, enum.Enum):
"""任务状态"""
PENDING = "pending" # 等待进入队列
QUEUED = "queued" # 已排队,等待执行
RUNNING = "running" # 正在执行
COMPLETED = "completed" # 执行完成
FAILED = "failed" # 执行失败
class Job(Base):
__tablename__ = "jobs"
id = Column(String, primary_key=True, index=True)
celery_task_id = Column(String, nullable=True, index=True)
status = Column(Enum(JobStatus), default=JobStatus.PENDING, index=True)
input_files = Column(JSON)
sequence_type = Column(String, default="nucl")
scaf_suffix = Column(String, default=".fna")
threads = Column(Integer, default=4)
# 分析参数
min_identity = Column(Integer, default=80) # 存储为百分比 (0-100)
min_coverage = Column(Integer, default=60)
allow_unknown_families = Column(Integer, default=0) # 0 = False, 1 = True
require_index_hit = Column(Integer, default=1)
result_url = Column(String, nullable=True)
logs = Column(Text, nullable=True)
error_message = Column(Text, nullable=True)
# 队列位置
queue_position = Column(Integer, nullable=True)
# 进度信息
current_stage = Column(String, nullable=True) # digger, shoter, plots, bundle
progress_percent = Column(Integer, default=0)
created_at = Column(DateTime(timezone=True), server_default=func.now(), index=True)
started_at = Column(DateTime(timezone=True), nullable=True)
completed_at = Column(DateTime(timezone=True), nullable=True)
updated_at = Column(DateTime(timezone=True), onupdate=func.now())