zenith-backend / core /models /performance.py
teoat's picture
Upload core/models/performance.py with huggingface_hub
2563309 verified
"""
Performance Monitoring Models
"""
import uuid
from sqlalchemy import Boolean, Column, DateTime, Float, Index, String
from core.models.base import Base, utc_now
class PerformanceMetric(Base):
"""
Performance Metrics Model
Stores frontend Web Vitals and other performance indicators.
"""
__tablename__ = "performance_metrics"
id = Column(String, primary_key=True, default=lambda: str(uuid.uuid4()))
timestamp = Column(DateTime, default=utc_now, nullable=False)
# Context
user_id = Column(String, nullable=True, index=True)
url = Column(String, nullable=False, index=True)
user_agent = Column(String, nullable=False)
# Web Vitals (all in milliseconds except CLS)
lcp = Column(Float, nullable=True) # Largest Contentful Paint
fid = Column(Float, nullable=True) # First Input Delay
cls = Column(Float, nullable=True) # Cumulative Layout Shift
fcp = Column(Float, nullable=True) # First Contentful Paint
ttfb = Column(Float, nullable=True) # Time to First Byte
# Additional Metrics
dom_content_loaded = Column(Float, nullable=True)
load_complete = Column(Float, nullable=True)
dom_interactive = Column(Float, nullable=True)
# Analysis
is_violation = Column(Boolean, default=False, nullable=False)
violation_details = Column(String, nullable=True)
__table_args__ = (
Index("idx_perf_timestamp", "timestamp"),
Index("idx_perf_url_timestamp", "url", "timestamp"),
)
def to_dict(self):
return {
"id": self.id,
"timestamp": self.timestamp.isoformat(),
"url": self.url,
"metrics": {
"lcp": self.lcp,
"fid": self.fid,
"cls": self.cls,
"fcp": self.fcp,
"ttfb": self.ttfb
},
"is_violation": self.is_violation
}