From 01e62b8e9dfc8973caaefe07c76f1d9e2b07ad5e Mon Sep 17 00:00:00 2001 From: Arvind Jayaprakash Date: Sun, 21 Sep 2025 18:34:19 +0530 Subject: [PATCH] fix: grafana alert idempotence logic Grafana can end up emitting the same group key across multiple events. The true unique value of each alert exists in a field known as figerprint. Hence we need to take this value for setting firehydrant's idempotence value. A single message/event may have multiple alerts. Hence, we concat all values to arrive at the key. Sorting of this array is needed for determistic output. --- src/grafana.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/grafana.js b/src/grafana.js index 37b27e3..2028a47 100644 --- a/src/grafana.js +++ b/src/grafana.js @@ -35,10 +35,12 @@ function transpose(input) { ...Object.fromEntries(Object.entries(payload.commonLabels).map(([k, v]) => [`grafana/labels-${k}`, v])), ...Object.fromEntries(Object.entries(payload.groupLabels).map(([k, v]) => [`grafana/grouped-by-${k}`, v])) }; + + const fingerprints = payload.alerts.map((alert) => alert.fingerprint); // Construct Signal let signal = { - idempotency_key: md5(payload.groupKey), + idempotency_key: md5(fingerprints.sort().join(' ')), summary: payload.title, body: payload.message, links: links,