008 add telegram alerts
This commit is contained in:
+37
-1
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user