Files
planet/backend/app/models/alert.py
linkong 8c204717cd
Some checks failed
ci / backend (push) Has been cancelled
ci / frontend (push) Has been cancelled
release / images (push) Has been cancelled
ci / delivery (push) Has been cancelled
release: bump version to 0.70.0
2026-06-04 17:16:23 +08:00

45 lines
1.9 KiB
Python

from datetime import datetime
from sqlalchemy import Column, Integer, String, DateTime, Text, Enum as SQLEnum
from app.core.enums import AlertSeverity, AlertStatus
from app.core.time import to_iso8601_utc
from app.db.session import Base
class Alert(Base):
__tablename__ = "alerts"
id = Column(Integer, primary_key=True, index=True)
severity = Column(SQLEnum(AlertSeverity), default=AlertSeverity.WARNING)
status = Column(SQLEnum(AlertStatus), default=AlertStatus.ACTIVE)
datasource_id = Column(Integer, nullable=True, index=True)
datasource_name = Column(String(255), nullable=True)
message = Column(Text)
alert_metadata = Column(Text, nullable=True)
acknowledged_by = Column(Integer, nullable=True)
resolved_by = Column(Integer, nullable=True)
resolution_notes = Column(Text, nullable=True)
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
acknowledged_at = Column(DateTime, nullable=True)
resolved_at = Column(DateTime, nullable=True)
def to_dict(self):
return {
"id": self.id,
"severity": self.severity.value if self.severity else None,
"status": self.status.value if self.status else None,
"datasource_id": self.datasource_id,
"datasource_name": self.datasource_name,
"message": self.message,
"alert_metadata": self.alert_metadata,
"acknowledged_by": self.acknowledged_by,
"resolved_by": self.resolved_by,
"resolution_notes": self.resolution_notes,
"created_at": to_iso8601_utc(self.created_at),
"updated_at": to_iso8601_utc(self.updated_at),
"acknowledged_at": to_iso8601_utc(self.acknowledged_at),
"resolved_at": to_iso8601_utc(self.resolved_at),
}