import datetime from sqlalchemy import ( Column, String, DateTime, Integer, ) from consts.consts import EdaTaskJobStatus from models.base import Base, BaseMixin class OpLog(Base, BaseMixin): __tablename__ = 'oplog' EVENT_CREATE_DATA_SUMMARY = "create_data_summary" EVENT_CHAT2DATA = "chat2data" event = Column(String(32), nullable=False) api_key = Column(String(64), nullable=False) created_by = Column(String(64), nullable=False) job_id = Column(String(36), nullable=False, index=True) cluster_id = Column(String(64), nullable=False, default=0) db_name = Column(String(64), nullable=False, default="") data_context_id = Column(Integer, nullable=False, default=0, index=True) extra = Column(String(1024), nullable=False, default="") # for chat2data, save the raw_question job_status = Column(String(32), nullable=False, default="") ends_at = Column(DateTime) @classmethod def create( cls, s, event, api_key, created_by, job_id, cluster_id, db_name, data_context_id, extra="", ): oplog = cls( event=event, api_key=api_key, created_by=created_by, job_id=job_id, cluster_id=cluster_id, db_name=db_name, data_context_id=data_context_id, extra=extra, job_status=EdaTaskJobStatus.INIT, ) s.add(oplog) s.flush() return oplog @classmethod def update_job_status(cls, s, job_id, job_status): oplog = s.query(cls).filter(cls.job_id == job_id).first() if oplog: # oplog may not exist oplog.job_status = job_status oplog.ends_at = datetime.datetime.now() s.flush()