From 51cad8ca17f252dbf376fbb245ec972c0e5c16a5 Mon Sep 17 00:00:00 2001 From: Dominik Guhr Date: Sat, 17 Feb 2024 17:10:10 +0100 Subject: [PATCH] Possible fix for #129 - Check if mention - configvalues are containing non-empty values only add to builder when they are not empty. --- receivers/slack/slack.go | 8 +++- receivers/slack/slack_test.go | 82 +++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 2 deletions(-) diff --git a/receivers/slack/slack.go b/receivers/slack/slack.go index 1aad87f5..8f3d8ead 100644 --- a/receivers/slack/slack.go +++ b/receivers/slack/slack.go @@ -368,14 +368,18 @@ func (sn *Notifier) createSlackMessage(ctx context.Context, alerts []*types.Aler if len(sn.settings.MentionGroups) > 0 { appendSpace() for _, g := range sn.settings.MentionGroups { - mentionsBuilder.WriteString(fmt.Sprintf("", tmpl(g))) + if strings.TrimSpace(g) != "" { + mentionsBuilder.WriteString(fmt.Sprintf("", tmpl(g))) + } } } if len(sn.settings.MentionUsers) > 0 { appendSpace() for _, u := range sn.settings.MentionUsers { - mentionsBuilder.WriteString(fmt.Sprintf("<@%s>", tmpl(u))) + if strings.TrimSpace(u) != "" { + mentionsBuilder.WriteString(fmt.Sprintf("<@%s>", tmpl(u))) + } } } diff --git a/receivers/slack/slack_test.go b/receivers/slack/slack_test.go index 5ea6446d..a1942671 100644 --- a/receivers/slack/slack_test.go +++ b/receivers/slack/slack_test.go @@ -508,6 +508,88 @@ func TestNotify_PostMessage(t *testing.T) { }, }, }, + }, { + name: "Message is sent without mentions when only empty values are in mention config", + settings: Config{ + EndpointURL: "https://example.com/api", + URL: "https://example.com/api", + Token: "1234", + Recipient: "#test", + Text: templates.DefaultMessageEmbed, + Title: templates.DefaultMessageTitleEmbed, + Username: "Grafana", + IconEmoji: ":emoji:", + IconURL: "", + MentionChannel: "", + MentionUsers: []string{""}, + MentionGroups: []string{"", " ", " "}, + }, + alerts: []*types.Alert{{ + Alert: model.Alert{ + Labels: model.LabelSet{"alertname": "alert1", "lbl1": "val1"}, + Annotations: model.LabelSet{"ann1": "annv1"}, + }, + }}, + expectedMessage: &slackMessage{ + Channel: "#test", + Username: "Grafana", + IconEmoji: ":emoji:", + Attachments: []attachment{ + { + Title: "[FIRING:1] (val1)", + TitleLink: "http://localhost/alerting/list", + Text: "**Firing**\n\nValue: [no value]\nLabels:\n - alertname = alert1\n - lbl1 = val1\nAnnotations:\n - ann1 = annv1\nSilence: http://localhost/alerting/silence/new?alertmanager=grafana&matcher=alertname%3Dalert1&matcher=lbl1%3Dval1\n", + Fallback: "[FIRING:1] (val1)", + Fields: nil, + Footer: "Grafana v" + appVersion, + FooterIcon: "https://grafana.com/static/assets/img/fav32.png", + Color: "#D63232", + Pretext: "", + MrkdwnIn: []string(nil), + }, + }, + }, + }, { + name: "Message is sent with right mention when empty and non-empty values are used", + settings: Config{ + EndpointURL: "https://example.com/api", + URL: "https://example.com/api", + Token: "1234", + Recipient: "#test", + Text: templates.DefaultMessageEmbed, + Title: templates.DefaultMessageTitleEmbed, + Username: "Grafana", + IconEmoji: ":emoji:", + IconURL: "", + MentionChannel: "", + MentionUsers: []string{"Test User", " "}, + MentionGroups: []string{"", " ", "Team Test"}, + }, + alerts: []*types.Alert{{ + Alert: model.Alert{ + Labels: model.LabelSet{"alertname": "alert1", "lbl1": "val1"}, + Annotations: model.LabelSet{"ann1": "annv1"}, + }, + }}, + expectedMessage: &slackMessage{ + Channel: "#test", + Username: "Grafana", + IconEmoji: ":emoji:", + Attachments: []attachment{ + { + Title: "[FIRING:1] (val1)", + TitleLink: "http://localhost/alerting/list", + Text: "**Firing**\n\nValue: [no value]\nLabels:\n - alertname = alert1\n - lbl1 = val1\nAnnotations:\n - ann1 = annv1\nSilence: http://localhost/alerting/silence/new?alertmanager=grafana&matcher=alertname%3Dalert1&matcher=lbl1%3Dval1\n", + Fallback: "[FIRING:1] (val1)", + Fields: nil, + Footer: "Grafana v" + appVersion, + FooterIcon: "https://grafana.com/static/assets/img/fav32.png", + Color: "#D63232", + Pretext: " <@Test User>", + MrkdwnIn: []string{"pretext"}, + }, + }, + }, }} for _, test := range tests {