Alerting: refactor receiver validation to be reusable (#46103)

This commit is contained in:
Jean-Philippe Quéméner
2022-03-15 00:27:10 +01:00
committed by GitHub
parent 00f67cad1b
commit e135b8531a
41 changed files with 975 additions and 575 deletions
@@ -490,46 +490,15 @@ func (m *migration) validateAlertmanagerConfig(orgID int64, config *PostableUser
}
return fallback
}
switch gr.Type {
case "email":
_, err = channels.NewEmailNotifier(cfg, nil, nil) // Email notifier already has a default template.
case "pagerduty":
_, err = channels.NewPagerdutyNotifier(cfg, nil, nil, decryptFunc)
case "pushover":
_, err = channels.NewPushoverNotifier(cfg, nil, nil, decryptFunc)
case "slack":
_, err = channels.NewSlackNotifier(cfg, nil, decryptFunc)
case "telegram":
_, err = channels.NewTelegramNotifier(cfg, nil, nil, decryptFunc)
case "victorops":
_, err = channels.NewVictoropsNotifier(cfg, nil, nil)
case "teams":
_, err = channels.NewTeamsNotifier(cfg, nil, nil)
case "dingding":
_, err = channels.NewDingDingNotifier(cfg, nil, nil)
case "kafka":
_, err = channels.NewKafkaNotifier(cfg, nil, nil)
case "webhook":
_, err = channels.NewWebHookNotifier(cfg, nil, nil, decryptFunc)
case "sensugo":
_, err = channels.NewSensuGoNotifier(cfg, nil, nil, decryptFunc)
case "discord":
_, err = channels.NewDiscordNotifier(cfg, nil, nil)
case "googlechat":
_, err = channels.NewGoogleChatNotifier(cfg, nil, nil)
case "LINE":
_, err = channels.NewLineNotifier(cfg, nil, nil, decryptFunc)
case "threema":
_, err = channels.NewThreemaNotifier(cfg, nil, nil, decryptFunc)
case "opsgenie":
_, err = channels.NewOpsgenieNotifier(cfg, nil, nil, decryptFunc)
case "prometheus-alertmanager":
_, err = channels.NewAlertmanagerNotifier(cfg, nil, decryptFunc)
default:
receiverFactory, exists := channels.Factory(gr.Type)
if !exists {
return fmt.Errorf("notifier %s is not supported", gr.Type)
}
factoryConfig, err := channels.NewFactoryConfig(cfg, nil, decryptFunc, nil)
if err != nil {
return err
}
_, err = receiverFactory(factoryConfig)
if err != nil {
return err
}
@@ -32,7 +32,7 @@ func Test_validateAlertmanagerConfig(t *testing.T) {
SecureSettings: map[string]string{"url": invalidUri},
},
},
err: fmt.Errorf("failed to validate receiver \"SlackWithBadURL\" of type \"slack\": invalid URL %q: parse %q: net/url: invalid control character in URL", invalidUri, invalidUri),
err: fmt.Errorf("failed to validate receiver \"SlackWithBadURL\" of type \"slack\": invalid URL %q", invalidUri),
},
{
name: "when a slack receiver has an invalid recipient - it should not error",