Base code
This commit is contained in:
99
backend/models/monitoring_models.py
Normal file
99
backend/models/monitoring_models.py
Normal file
@@ -0,0 +1,99 @@
|
||||
from sqlalchemy import Column, Integer, String, Text, DateTime, Boolean, JSON, ForeignKey
|
||||
from sqlalchemy.orm import relationship
|
||||
from datetime import datetime
|
||||
|
||||
# Import the same Base from enhanced_strategy_models
|
||||
from models.enhanced_strategy_models import Base
|
||||
|
||||
class StrategyMonitoringPlan(Base):
|
||||
"""Model for storing strategy monitoring plans"""
|
||||
__tablename__ = "strategy_monitoring_plans"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
strategy_id = Column(Integer, ForeignKey("enhanced_content_strategies.id"), nullable=False)
|
||||
plan_data = Column(JSON, nullable=False) # Store the complete monitoring plan
|
||||
created_at = Column(DateTime, default=datetime.utcnow)
|
||||
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
# Relationship to strategy
|
||||
strategy = relationship("EnhancedContentStrategy", back_populates="monitoring_plans")
|
||||
|
||||
class MonitoringTask(Base):
|
||||
"""Model for storing individual monitoring tasks"""
|
||||
__tablename__ = "monitoring_tasks"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
strategy_id = Column(Integer, ForeignKey("enhanced_content_strategies.id"), nullable=False)
|
||||
component_name = Column(String(100), nullable=False)
|
||||
task_title = Column(String(200), nullable=False)
|
||||
task_description = Column(Text, nullable=False)
|
||||
assignee = Column(String(50), nullable=False) # 'ALwrity' or 'Human'
|
||||
frequency = Column(String(50), nullable=False) # 'Daily', 'Weekly', 'Monthly', 'Quarterly'
|
||||
metric = Column(String(100), nullable=False)
|
||||
measurement_method = Column(Text, nullable=False)
|
||||
success_criteria = Column(Text, nullable=False)
|
||||
alert_threshold = Column(Text, nullable=False)
|
||||
status = Column(String(50), default='pending') # 'pending', 'active', 'completed', 'failed'
|
||||
last_executed = Column(DateTime, nullable=True)
|
||||
next_execution = Column(DateTime, nullable=True)
|
||||
created_at = Column(DateTime, default=datetime.utcnow)
|
||||
|
||||
# Relationships
|
||||
strategy = relationship("EnhancedContentStrategy", back_populates="monitoring_tasks")
|
||||
execution_logs = relationship("TaskExecutionLog", back_populates="task", cascade="all, delete-orphan")
|
||||
|
||||
class TaskExecutionLog(Base):
|
||||
"""Model for storing task execution logs"""
|
||||
__tablename__ = "task_execution_logs"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
task_id = Column(Integer, ForeignKey("monitoring_tasks.id"), nullable=False)
|
||||
user_id = Column(Integer, nullable=True) # User ID for user isolation (nullable for backward compatibility)
|
||||
execution_date = Column(DateTime, default=datetime.utcnow)
|
||||
status = Column(String(50), nullable=False) # 'success', 'failed', 'skipped', 'running'
|
||||
result_data = Column(JSON, nullable=True)
|
||||
error_message = Column(Text, nullable=True)
|
||||
execution_time_ms = Column(Integer, nullable=True)
|
||||
created_at = Column(DateTime, default=datetime.utcnow)
|
||||
|
||||
# Relationship to monitoring task
|
||||
task = relationship("MonitoringTask", back_populates="execution_logs")
|
||||
|
||||
class StrategyPerformanceMetrics(Base):
|
||||
"""Model for storing strategy performance metrics"""
|
||||
__tablename__ = "strategy_performance_metrics"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
strategy_id = Column(Integer, ForeignKey("enhanced_content_strategies.id"), nullable=False)
|
||||
user_id = Column(Integer, nullable=False)
|
||||
metric_date = Column(DateTime, default=datetime.utcnow)
|
||||
traffic_growth_percentage = Column(Integer, nullable=True)
|
||||
engagement_rate_percentage = Column(Integer, nullable=True)
|
||||
conversion_rate_percentage = Column(Integer, nullable=True)
|
||||
roi_ratio = Column(Integer, nullable=True)
|
||||
strategy_adoption_rate = Column(Integer, nullable=True)
|
||||
content_quality_score = Column(Integer, nullable=True)
|
||||
competitive_position_rank = Column(Integer, nullable=True)
|
||||
audience_growth_percentage = Column(Integer, nullable=True)
|
||||
data_source = Column(String(100), nullable=True)
|
||||
confidence_score = Column(Integer, nullable=True)
|
||||
created_at = Column(DateTime, default=datetime.utcnow)
|
||||
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
# Relationship to strategy
|
||||
strategy = relationship("EnhancedContentStrategy", back_populates="performance_metrics")
|
||||
|
||||
class StrategyActivationStatus(Base):
|
||||
"""Model for storing strategy activation status"""
|
||||
__tablename__ = "strategy_activation_status"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
strategy_id = Column(Integer, ForeignKey("enhanced_content_strategies.id"), nullable=False)
|
||||
user_id = Column(Integer, nullable=False)
|
||||
activation_date = Column(DateTime, default=datetime.utcnow)
|
||||
status = Column(String(50), default='active') # 'active', 'inactive', 'paused'
|
||||
performance_score = Column(Integer, nullable=True)
|
||||
last_updated = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
# Relationship to strategy
|
||||
strategy = relationship("EnhancedContentStrategy", back_populates="activation_status")
|
||||
Reference in New Issue
Block a user