checkers are now objects, lay foundation for persistent alerts

This commit is contained in:
Alex Tau 2025-06-05 21:45:01 +03:00
parent 5d2759c63c
commit eef6ec59b0
12 changed files with 162 additions and 81 deletions

View file

@ -0,0 +1,10 @@
from dataclasses import dataclass
from .enum import AlertType, Severity
@dataclass
class Alert:
alert_type: AlertType
message: str
severity: Severity

View file

@ -4,16 +4,10 @@ from telethon import TelegramClient
from telethon.sessions import MemorySession
from ..core import cvars
from .alert import Alert
from .enum import AlertType, Severity
@dataclass
class Alert:
alert_type: AlertType
message: str
severity: Severity
async def get_client() -> TelegramClient:
config = cvars.config.get()
api_id, api_hash, bot_token = config.telegram.creds.split(",")
@ -24,6 +18,8 @@ async def get_client() -> TelegramClient:
def format_message(alert: Alert) -> str:
match alert.severity:
case Severity.OK:
severity_emoji = "🟢"
case Severity.INFO:
severity_emoji = ""
case Severity.WARNING:

View file

@ -0,0 +1,26 @@
from typing import Optional
from .alert import Alert
from .enum import AlertType, Severity
class CurrentAlerts(list[Alert]):
def get_severity(self) -> Optional[Severity]:
max_severity = None
for a in self:
if max_severity is None or a.severity > max_severity:
max_severity = a.severity
return a.severity
def get_types(self) -> set[AlertType]:
types = set()
for a in self:
types.add(a.alert_type)
return types
def update(self, alerts: list[Alert]) -> tuple[Optional[Severity], Optional[Severity]]:
old_severity = self.get_severity()
self.clear()
self.extend(alerts)
new_severity = self.get_severity()
return (old_severity, new_severity)

View file

@ -1,4 +1,4 @@
from enum import StrEnum
from enum import IntEnum, StrEnum
class AlertType(StrEnum):
@ -17,7 +17,8 @@ class AlertType(StrEnum):
# UPDATE = "UPDATE"
class Severity(StrEnum):
INFO = "INFO"
WARNING = "WARNING"
CRITICAL = "CRITICAL"
class Severity(IntEnum):
OK = 0 # should only be used when persistent alerts resolve
INFO = 1
WARNING = 2
CRITICAL = 3