from __future__ import annotations import logging import re from typing import Any, Dict logger = logging.getLogger(__name__) class Alert: EMOJIS = {"critical": "🔥", "warning": "⚠️", "resolved": "🥦"} COLORS = {"critical": "dc3545", "warning": "ffc107", "resolved": "33cc33"} def __init__( self, id: str, url: str, firing: bool = True, labels: Dict[str, str] = None, annotations: Dict[str, str] = None, ): self.id = id self.url = url self.firing = firing if labels is None: self.labels = {} else: self.labels = labels if annotations is None: self.annotations = {} else: self.annotations = annotations if self.firing: self.status = self.labels["severity"] else: self.status = "resolved" @staticmethod def from_dict(data: Dict) -> Alert: return Alert( id=data["fingerprint"], url=data["generatorURL"], firing=data["status"] == "firing", labels=data["labels"], annotations=data["annotations"], ) @property def emoji(self) -> str: return self.EMOJIS[self.status] @property def color(self) -> str: return self.COLORS[self.status] def plaintext(self) -> str: alertname = self.labels["alertname"] description = self.annotations["description"] return f"[{self.emoji} {self.status.upper()}] {alertname}: {description}" def html(self) -> str: alertname = self.labels["alertname"] job = self.labels["job"] description = self.annotations["description"] return ( f"[{self.emoji} {self.status.upper()}] " f"{alertname} ({job})
{description}" )