diff --git a/ops_bot/alertmanager.py b/ops_bot/alertmanager.py index 72207d5..3b69da9 100644 --- a/ops_bot/alertmanager.py +++ b/ops_bot/alertmanager.py @@ -29,7 +29,9 @@ def prometheus_alert_to_markdown( ignore_labels = ["grafana_folder"] logging.debug(f"alertmanager payload: {alert_data}") + externalURL = alert_data.get("externalURL") for alert in alert_data["alerts"]: + alertname = alert["labels"]["alertname"] title = alert["labels"]["alertname"] summary = alert["annotations"].get("summary") description = alert["annotations"].get("description") @@ -70,6 +72,10 @@ def prometheus_alert_to_markdown( dashboardURL = alert.get("dashboardURL") silenceURL = alert.get("silenceURL") actions = [] + if not silenceURL and externalURL: + silence_filter = f"alertname%3D%22{alertname}%22" + silence_filter = "{" + silence_filter + "}" + silenceURL = f"{externalURL}/#/silences/new?filter={silence_filter}" if silenceURL: actions.append(f"[🔕 Mute]({silenceURL})") if runbookURL: diff --git a/tests/test_alertmanager.py b/tests/test_alertmanager.py index 0c2e274..5ab1063 100644 --- a/tests/test_alertmanager.py +++ b/tests/test_alertmanager.py @@ -69,4 +69,6 @@ def test_alertmanager(): and "webserver.example.com" in formatted and "Instance webserver.example.com down" in formatted and "critical" in formatted + and "https://alert.example/#/silences/new?filter={alertname%3D%22InstanceDown%22}" + in formatted )