task.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. """Simulation task model for Web-Local dispatch (P4-M2)."""
  2. from sqlalchemy import Column, Integer, String, Float, DateTime, Text
  3. from sqlalchemy.sql import func
  4. from ..database import Base
  5. class Task(Base):
  6. """Simulation task dispatched from Web to Local executor."""
  7. __tablename__ = "tasks"
  8. id = Column(Integer, primary_key=True, index=True)
  9. task_id = Column(String(16), unique=True, index=True, nullable=False)
  10. task_name = Column(String(200), nullable=False)
  11. plan_id = Column(Integer, nullable=True)
  12. status = Column(String(20), default="pending", index=True)
  13. priority = Column(Integer, default=5)
  14. total_points = Column(Integer, default=0)
  15. completed_points = Column(Integer, default=0)
  16. task_dir = Column(String(500), nullable=True)
  17. task_file = Column(String(500), nullable=True)
  18. results_file = Column(String(500), nullable=True)
  19. progress_data = Column(Text, nullable=True)
  20. result_metrics = Column(Text, nullable=True)
  21. created_by = Column(String(50), default="web")
  22. created_at = Column(DateTime(timezone=True), server_default=func.now())
  23. dispatched_at = Column(DateTime(timezone=True), nullable=True)
  24. started_at = Column(DateTime(timezone=True), nullable=True)
  25. completed_at = Column(DateTime(timezone=True), nullable=True)
  26. # P3-M2: adaptive-batch task fields (backward compatible).
  27. task_type = Column(String(20), default="scan") # scan | adaptive_batch
  28. loop_id = Column(String(64), nullable=True, index=True)
  29. batch_id = Column(Integer, nullable=True)
  30. point_ids = Column(Text, nullable=True) # JSON list of point ids
  31. dynamic = Column(Integer, default=0) # 1 = more batches may follow
  32. duration = Column(Float, nullable=True)