abfd07331e
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
64 lines
2.0 KiB
Python
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}
|