mirror of
https://forgejo.altau.su/lego/lego-monitoring.git
synced 2026-03-12 05:35:19 +00:00
checkers are now objects, lay foundation for persistent alerts
This commit is contained in:
parent
5d2759c63c
commit
eef6ec59b0
12 changed files with 162 additions and 81 deletions
10
src/lego_monitoring/alerting/alert.py
Normal file
10
src/lego_monitoring/alerting/alert.py
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
from dataclasses import dataclass
|
||||
|
||||
from .enum import AlertType, Severity
|
||||
|
||||
|
||||
@dataclass
|
||||
class Alert:
|
||||
alert_type: AlertType
|
||||
message: str
|
||||
severity: Severity
|
||||
|
|
@ -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:
|
||||
26
src/lego_monitoring/alerting/current.py
Normal file
26
src/lego_monitoring/alerting/current.py
Normal 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)
|
||||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue