from sqlalchemy import Column, Integer, String, Float, Boolean, DateTime, Text from sqlalchemy.orm import declarative_base from datetime import datetime Base = declarative_base() class CheckResult(Base): __tablename__ = "check_results" id = Column(Integer, primary_key=True, index=True) url = Column(String, index=True) check_type = Column(String) # http, dns, ssl, domain, ... status = Column(String) # ok, warning, error value = Column(Text, nullable=True) # human-readable result detail = Column(Text, nullable=True) # full JSON detail duration = Column(Float, nullable=True) # ms created_at = Column(DateTime, default=datetime.utcnow) class Screenshot(Base): __tablename__ = "screenshots" id = Column(Integer, primary_key=True, index=True) url = Column(String, index=True) path = Column(String) issue_detected = Column(Boolean, default=False) created_at = Column(DateTime, default=datetime.utcnow) class CrawlPage(Base): __tablename__ = "crawl_pages" id = Column(Integer, primary_key=True, index=True) site_url = Column(String, index=True) page_url = Column(String) status = Column(String) # ok / broken / redirect status_code= Column(Integer, nullable=True) error = Column(Text, nullable=True) created_at = Column(DateTime, default=datetime.utcnow) class AlertLog(Base): __tablename__ = "alert_logs" id = Column(Integer, primary_key=True, index=True) url = Column(String, index=True) severity = Column(String) # info / warning / critical message = Column(Text) sent_at = Column(DateTime, default=datetime.utcnow)