008 add telegram alerts

This commit is contained in:
Раис Юсупалиев
2026-03-08 12:04:42 +03:00
parent 8d47917ba2
commit 34d7a4c336
10 changed files with 256 additions and 6 deletions
+37 -1
View File
@@ -3,7 +3,7 @@
import os
from functools import lru_cache
from pydantic import BaseModel, Field
from pydantic import BaseModel, Field, model_validator
from pydantic_settings import (
BaseSettings,
PydanticBaseSettingsSource,
@@ -50,10 +50,46 @@ class ObservabilityConfig(BaseModel):
log_level: str = "INFO"
class Provider5xxAlertConfig(BaseModel):
error_count: int = Field(default=5, ge=1)
window_minutes: int = Field(default=5, ge=1)
class ProviderP99LatencyAlertConfig(BaseModel):
threshold_ms: int = Field(default=5000, ge=1)
window_minutes: int = Field(default=10, ge=1)
class ProviderUnavailableAlertConfig(BaseModel):
duration_minutes: int = Field(default=5, ge=1)
class AlertsConfig(BaseModel):
telegram_enabled: bool = False
telegram_bot_token: str | None = None
telegram_chat_id: str | None = None
provider_5xx: Provider5xxAlertConfig = Field(default_factory=Provider5xxAlertConfig)
provider_p99_latency: ProviderP99LatencyAlertConfig = Field(
default_factory=ProviderP99LatencyAlertConfig
)
provider_unavailable: ProviderUnavailableAlertConfig = Field(
default_factory=ProviderUnavailableAlertConfig
)
@model_validator(mode="after")
def validate_telegram_credentials(self) -> "AlertsConfig":
if not self.telegram_enabled:
return self
if not self.telegram_bot_token:
raise ValueError(
"alerts.telegram_bot_token is required when alerts.telegram_enabled=true"
)
if not self.telegram_chat_id:
raise ValueError(
"alerts.telegram_chat_id is required when alerts.telegram_enabled=true"
)
return self
class Settings(BaseSettings):