diff --git a/pythonkuma/models.py b/pythonkuma/models.py index d6ae91c..0373858 100644 --- a/pythonkuma/models.py +++ b/pythonkuma/models.py @@ -92,6 +92,8 @@ class UptimeKumaMonitor(UptimeKumaBaseModel): monitor_response_time_seconds_30d: float | None = None monitor_response_time_seconds_365d: float | None = None + monitor_tags: list[str] + @dataclass class UptimeKumaVersion(UptimeKumaBaseModel): diff --git a/pythonkuma/uptimekuma.py b/pythonkuma/uptimekuma.py index 0aa9e9d..e4fe845 100644 --- a/pythonkuma/uptimekuma.py +++ b/pythonkuma/uptimekuma.py @@ -20,6 +20,16 @@ ) from .models import UptimeKumaMonitor, UptimeKumaVersion +COMMON_LABELS = ( + "monitor_id", + "monitor_name", + "monitor_type", + "monitor_url", + "monitor_hostname", + "monitor_port", + "window", +) + class UptimeKuma: """Uptime Kuma client.""" @@ -111,13 +121,20 @@ async def metrics(self) -> dict[str | int, UptimeKumaMonitor]: else sample.labels["monitor_name"] ) + tags = [ + f"{k}:{v}" if v else k + for k, v in sample.labels.items() + if k not in COMMON_LABELS + ] name = ( f"{sample.name}_{window}" if (window := sample.labels.get("window")) else sample.name ) - monitors.setdefault(key, sample.labels).update({name: sample.value}) + monitors.setdefault( + key, {**sample.labels, "monitor_tags": tags} + ).update({name: sample.value}) return { key: UptimeKumaMonitor.from_dict(value) for key, value in monitors.items()