49 lines
1.9 KiB
Python
49 lines
1.9 KiB
Python
"""
|
|
Scheduler Cumulative Stats Model
|
|
Model for storing persistent cumulative scheduler metrics that survive restarts.
|
|
"""
|
|
|
|
from sqlalchemy import Column, Integer, DateTime, Index
|
|
from datetime import datetime
|
|
from models.enhanced_strategy_models import Base
|
|
|
|
|
|
class SchedulerCumulativeStats(Base):
|
|
"""Model for storing cumulative scheduler metrics that persist across restarts"""
|
|
__tablename__ = "scheduler_cumulative_stats"
|
|
|
|
id = Column(Integer, primary_key=True, index=True, default=1) # Always use id=1
|
|
total_check_cycles = Column(Integer, default=0, nullable=False)
|
|
cumulative_tasks_found = Column(Integer, default=0, nullable=False)
|
|
cumulative_tasks_executed = Column(Integer, default=0, nullable=False)
|
|
cumulative_tasks_failed = Column(Integer, default=0, nullable=False)
|
|
cumulative_tasks_skipped = Column(Integer, default=0, nullable=False)
|
|
cumulative_job_completed = Column(Integer, default=0, nullable=False)
|
|
cumulative_job_failed = Column(Integer, default=0, nullable=False)
|
|
|
|
last_updated = Column(DateTime, default=datetime.utcnow, nullable=False, onupdate=datetime.utcnow)
|
|
last_check_cycle_id = Column(Integer, nullable=True) # Reference to last check_cycle event log ID
|
|
|
|
created_at = Column(DateTime, default=datetime.utcnow, nullable=False)
|
|
updated_at = Column(DateTime, default=datetime.utcnow, nullable=False, onupdate=datetime.utcnow)
|
|
|
|
__table_args__ = (
|
|
Index('idx_scheduler_cumulative_stats_single_row', 'id', unique=True),
|
|
)
|
|
|
|
@classmethod
|
|
def get_or_create(cls, db_session):
|
|
"""
|
|
Get the cumulative stats row (id=1) or create it if it doesn't exist.
|
|
|
|
Returns:
|
|
SchedulerCumulativeStats instance
|
|
"""
|
|
stats = db_session.query(cls).filter(cls.id == 1).first()
|
|
if not stats:
|
|
stats = cls(id=1)
|
|
db_session.add(stats)
|
|
db_session.commit()
|
|
return stats
|
|
|