Files
LogHive/backend/app/schemas/alert.py
T
2026-05-09 14:55:14 +08:00

64 lines
2.0 KiB
Python

"""Alert schemas."""
from datetime import datetime
from typing import List, Optional
from pydantic import BaseModel, Field
# ── Alert Rule ─────────────────────────────────────────────────
class AlertRuleCreate(BaseModel):
project_id: str = Field(..., min_length=1, max_length=36)
name: str = Field(..., min_length=1, max_length=128)
level: str = Field(default="warning", pattern="^(info|warning|critical)$")
field: str = Field(default="level", max_length=64)
operator: str = Field(default="gte", pattern="^(gt|gte|lt|lte|eq)$")
threshold: float = Field(..., ge=0)
window_minutes: int = Field(default=5, ge=1, le=1440)
notify_channels: List[str] = Field(default_factory=list)
class AlertRuleUpdate(BaseModel):
name: Optional[str] = Field(default=None, max_length=128)
level: Optional[str] = Field(default=None, pattern="^(info|warning|critical)$")
field: Optional[str] = Field(default=None, max_length=64)
operator: Optional[str] = Field(default=None, pattern="^(gt|gte|lt|lte|eq)$")
threshold: Optional[float] = Field(default=None, ge=0)
window_minutes: Optional[int] = Field(default=None, ge=1, le=1440)
is_enabled: Optional[bool] = None
notify_channels: Optional[List[str]] = None
class AlertRuleResponse(BaseModel):
id: str
project_id: str
name: str
level: str
field: str
operator: str
threshold: float
window_minutes: int
is_enabled: bool
notify_channels: List[str]
created_at: datetime
model_config = {"from_attributes": True}
# ── Alert History ──────────────────────────────────────────────
class AlertHistoryResponse(BaseModel):
id: str
rule_id: str
project_id: str
level: str
message: str
triggered_value: Optional[float] = None
is_acknowledged: bool
triggered_at: datetime
model_config = {"from_attributes": True}