From 1d21f5889d40366176efe6c456ac503ed11973d8 Mon Sep 17 00:00:00 2001 From: Robert Hoppe Date: Thu, 18 Feb 2021 19:03:12 +0100 Subject: [PATCH] Move away from generic solution to a fixed one --- alerting/provider/custom/custom.go | 40 +++++++++++-------------- alerting/provider/custom/custom_test.go | 14 ++++----- 2 files changed, 23 insertions(+), 31 deletions(-) diff --git a/alerting/provider/custom/custom.go b/alerting/provider/custom/custom.go index 78c625e7..d2c8e768 100644 --- a/alerting/provider/custom/custom.go +++ b/alerting/provider/custom/custom.go @@ -24,13 +24,6 @@ type AlertProvider struct { Placeholders map[string]map[string]string `yaml:"placeholders,omitempty"` } -var DefaultPlaceholderValues = map[string]map[string]string{ - "ALERT_TRIGGERED_OR_RESOLVED": map[string]string{ - "triggered": "TRIGGERED", - "resolved": "RESOLVED", - }, -} - // IsValid returns whether the provider's configuration is valid func (provider *AlertProvider) IsValid() bool { return len(provider.URL) > 0 @@ -41,21 +34,24 @@ func (provider *AlertProvider) ToCustomAlertProvider(service *core.Service, aler return provider } -// GetPlaceholderValue returns the Placeholder value -func (provider *AlertProvider) GetPlaceholderValue(name, status string) string { - if _, ok := provider.Placeholders[name]; ok { - if val, ok := provider.Placeholders[name][status]; ok { +// GetPlaceholderValue returns the Placeholder value for ALERT_TRIGGERED_OR_RESOLVED if configured +func (provider *AlertProvider) GetAlertStatePlaceholderValue(resolved bool) string { + status := "triggered" + if resolved { + status = "resolved" + } + + if _, ok := provider.Placeholders["ALERT_TRIGGERED_OR_RESOLVED"]; ok { + if val, ok := provider.Placeholders["ALERT_TRIGGERED_OR_RESOLVED"][status]; ok { return val } - } else { - if _, ok := DefaultPlaceholderValues[name]; ok { - if val, ok := DefaultPlaceholderValues[name][status]; ok { - return val - } - } } - return "" + if resolved { + return "RESOLVED" + } + + return "TRIGGERED" } func (provider *AlertProvider) buildHTTPRequest(serviceName, alertDescription string, resolved bool) *http.Request { @@ -71,9 +67,9 @@ func (provider *AlertProvider) buildHTTPRequest(serviceName, alertDescription st } if strings.Contains(body, "[ALERT_TRIGGERED_OR_RESOLVED]") { if resolved { - body = strings.ReplaceAll(body, "[ALERT_TRIGGERED_OR_RESOLVED]", provider.GetPlaceholderValue("ALERT_TRIGGERED_OR_RESOLVED", "resolved")) + body = strings.ReplaceAll(body, "[ALERT_TRIGGERED_OR_RESOLVED]", provider.GetAlertStatePlaceholderValue(true)) } else { - body = strings.ReplaceAll(body, "[ALERT_TRIGGERED_OR_RESOLVED]", provider.GetPlaceholderValue("ALERT_TRIGGERED_OR_RESOLVED", "triggered")) + body = strings.ReplaceAll(body, "[ALERT_TRIGGERED_OR_RESOLVED]", provider.GetAlertStatePlaceholderValue(false)) } } if strings.Contains(providerURL, "[ALERT_DESCRIPTION]") { @@ -84,9 +80,9 @@ func (provider *AlertProvider) buildHTTPRequest(serviceName, alertDescription st } if strings.Contains(providerURL, "[ALERT_TRIGGERED_OR_RESOLVED]") { if resolved { - providerURL = strings.ReplaceAll(providerURL, "[ALERT_TRIGGERED_OR_RESOLVED]", provider.GetPlaceholderValue("ALERT_TRIGGERED_OR_RESOLVED", "resolved")) + providerURL = strings.ReplaceAll(providerURL, "[ALERT_TRIGGERED_OR_RESOLVED]", provider.GetAlertStatePlaceholderValue(true)) } else { - providerURL = strings.ReplaceAll(providerURL, "[ALERT_TRIGGERED_OR_RESOLVED]", provider.GetPlaceholderValue("ALERT_TRIGGERED_OR_RESOLVED", "triggered")) + providerURL = strings.ReplaceAll(providerURL, "[ALERT_TRIGGERED_OR_RESOLVED]", provider.GetAlertStatePlaceholderValue(false)) } } if len(method) == 0 { diff --git a/alerting/provider/custom/custom_test.go b/alerting/provider/custom/custom_test.go index 5587255d..4c09b282 100644 --- a/alerting/provider/custom/custom_test.go +++ b/alerting/provider/custom/custom_test.go @@ -94,7 +94,7 @@ func TestAlertProvider_buildHTTPRequestWithCustomPlaceholder(t *testing.T) { } } -func TestAlertProvider_GetPlaceholderValue(t *testing.T) { +func TestAlertProvider_GetAlertStatePlaceholderValueDefaults(t *testing.T) { customAlertProvider := &AlertProvider{ URL: "http://example.com/[SERVICE_NAME]?event=[ALERT_TRIGGERED_OR_RESOLVED]&description=[ALERT_DESCRIPTION]", Body: "[SERVICE_NAME],[ALERT_DESCRIPTION],[ALERT_TRIGGERED_OR_RESOLVED]", @@ -102,15 +102,11 @@ func TestAlertProvider_GetPlaceholderValue(t *testing.T) { Placeholders: nil, } - if customAlertProvider.GetPlaceholderValue("I_DO_NOT_EXIST", "i_do_also_no_exist") != "" { - t.Error("expected empty response from a non existing placeholder") + if customAlertProvider.GetAlertStatePlaceholderValue(true) != "RESOLVED" { + t.Error("expected here actually RESOLVED") } - if customAlertProvider.GetPlaceholderValue("ALERT_TRIGGERED_OR_RESOLVED", "I_DO_NOT_EXIST") != "" { - t.Error("expected empty response from a non existing subvalue") - } - - if customAlertProvider.GetPlaceholderValue("ALERT_TRIGGERED_OR_RESOLVED", "triggered") != "TRIGGERED" { - t.Error("expected 'triggered' as a result") + if customAlertProvider.GetAlertStatePlaceholderValue(false) != "TRIGGERED" { + t.Error("expected here actually TRIGGERED") } }