56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
# services/alert_processor/app/models/alerts.py
|
|
"""
|
|
Alert models for the alert processor service
|
|
"""
|
|
|
|
from sqlalchemy import Column, String, Text, DateTime, JSON, Enum
|
|
from sqlalchemy.dialects.postgresql import UUID
|
|
from datetime import datetime
|
|
import uuid
|
|
import enum
|
|
|
|
from shared.database.base import Base
|
|
|
|
|
|
class AlertStatus(enum.Enum):
|
|
"""Alert status values"""
|
|
ACTIVE = "active"
|
|
RESOLVED = "resolved"
|
|
ACKNOWLEDGED = "acknowledged"
|
|
IGNORED = "ignored"
|
|
|
|
|
|
class AlertSeverity(enum.Enum):
|
|
"""Alert severity levels"""
|
|
LOW = "low"
|
|
MEDIUM = "medium"
|
|
HIGH = "high"
|
|
URGENT = "urgent"
|
|
|
|
|
|
class Alert(Base):
|
|
"""Alert records for the alert processor service"""
|
|
__tablename__ = "alerts"
|
|
|
|
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
|
tenant_id = Column(UUID(as_uuid=True), nullable=False, index=True)
|
|
|
|
# Alert classification
|
|
item_type = Column(String(50), nullable=False) # 'alert' or 'recommendation'
|
|
alert_type = Column(String(100), nullable=False) # e.g., 'overstock_warning'
|
|
severity = Column(Enum(AlertSeverity), nullable=False, index=True)
|
|
status = Column(Enum(AlertStatus), default=AlertStatus.ACTIVE, index=True)
|
|
|
|
# Source and content
|
|
service = Column(String(100), nullable=False) # originating service
|
|
title = Column(String(255), nullable=False)
|
|
message = Column(Text, nullable=False)
|
|
|
|
# Actions and metadata
|
|
actions = Column(JSON, nullable=True) # List of available actions
|
|
alert_metadata = Column(JSON, nullable=True) # Additional alert-specific data
|
|
|
|
# Timestamps
|
|
created_at = Column(DateTime, default=datetime.utcnow, index=True)
|
|
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
|
resolved_at = Column(DateTime, nullable=True) |