From 741109f25df2e7205e40c8569cf56fe91d889b3f Mon Sep 17 00:00:00 2001 From: TwiN Date: Tue, 6 Dec 2022 01:27:31 -0500 Subject: [PATCH] chore!: Remove deprecated "services" in favor of "endpoints" (#381) BREAKING CHANGE: `services` has been replaced by `endpoints` in v3.3.0, but backward compatibility has been retained until now. v5.0.0, however, will no longer support `services`, so make sure to update your configuration to use `endpoints` instead. See #374 for more information --- config/config.go | 14 ------ config/config_test.go | 108 ++++++++++++++---------------------------- 2 files changed, 35 insertions(+), 87 deletions(-) diff --git a/config/config.go b/config/config.go index 2790049b..16f0ae74 100644 --- a/config/config.go +++ b/config/config.go @@ -68,14 +68,6 @@ type Config struct { // Endpoints List of endpoints to monitor Endpoints []*core.Endpoint `yaml:"endpoints,omitempty"` - // Services List of endpoints to monitor - // - // XXX: Remove this in v5.0.0 - // XXX: This is not a typo -- not v4.0.0, but v5.0.0 -- I want to give enough time for people to migrate - // - // Deprecated in favor of Endpoints - Services []*core.Endpoint `yaml:"services,omitempty"` - // Storage is the configuration for how the data is stored Storage *storage.Config `yaml:"storage,omitempty"` @@ -173,12 +165,6 @@ func parseAndValidateConfigBytes(yamlBytes []byte) (config *Config, err error) { if err = yaml.Unmarshal(yamlBytes, &config); err != nil { return } - if config != nil && len(config.Services) > 0 { // XXX: Remove this in v5.0.0 - log.Println("WARNING: Your configuration is using 'services:', which is deprecated in favor of 'endpoints:'.") - log.Println("WARNING: See https://github.com/TwiN/gatus/issues/191 for more information") - config.Endpoints = append(config.Endpoints, config.Services...) - config.Services = nil - } // Check if the configuration file at least has endpoints configured if config == nil || config.Endpoints == nil || len(config.Endpoints) == 0 { err = ErrNoEndpointInConfig diff --git a/config/config_test.go b/config/config_test.go index 5a9ea5ff..b8379801 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -7,10 +7,16 @@ import ( "github.com/TwiN/gatus/v4/alerting" "github.com/TwiN/gatus/v4/alerting/alert" + "github.com/TwiN/gatus/v4/alerting/provider" "github.com/TwiN/gatus/v4/alerting/provider/custom" "github.com/TwiN/gatus/v4/alerting/provider/discord" + "github.com/TwiN/gatus/v4/alerting/provider/email" + "github.com/TwiN/gatus/v4/alerting/provider/googlechat" + "github.com/TwiN/gatus/v4/alerting/provider/matrix" "github.com/TwiN/gatus/v4/alerting/provider/mattermost" "github.com/TwiN/gatus/v4/alerting/provider/messagebird" + "github.com/TwiN/gatus/v4/alerting/provider/ntfy" + "github.com/TwiN/gatus/v4/alerting/provider/opsgenie" "github.com/TwiN/gatus/v4/alerting/provider/pagerduty" "github.com/TwiN/gatus/v4/alerting/provider/slack" "github.com/TwiN/gatus/v4/alerting/provider/teams" @@ -1215,87 +1221,43 @@ func TestGetAlertingProviderByAlertType(t *testing.T) { alertingConfig := &alerting.Config{ Custom: &custom.AlertProvider{}, Discord: &discord.AlertProvider{}, + Email: &email.AlertProvider{}, + GoogleChat: &googlechat.AlertProvider{}, + Matrix: &matrix.AlertProvider{}, Mattermost: &mattermost.AlertProvider{}, Messagebird: &messagebird.AlertProvider{}, + Ntfy: &ntfy.AlertProvider{}, + Opsgenie: &opsgenie.AlertProvider{}, PagerDuty: &pagerduty.AlertProvider{}, Slack: &slack.AlertProvider{}, Telegram: &telegram.AlertProvider{}, Twilio: &twilio.AlertProvider{}, Teams: &teams.AlertProvider{}, } - if alertingConfig.GetAlertingProviderByAlertType(alert.TypeCustom) != alertingConfig.Custom { - t.Error("expected Custom configuration") + scenarios := []struct { + alertType alert.Type + expected provider.AlertProvider + }{ + {alertType: alert.TypeCustom, expected: alertingConfig.Custom}, + {alertType: alert.TypeDiscord, expected: alertingConfig.Discord}, + {alertType: alert.TypeEmail, expected: alertingConfig.Email}, + {alertType: alert.TypeGoogleChat, expected: alertingConfig.GoogleChat}, + {alertType: alert.TypeMatrix, expected: alertingConfig.Matrix}, + {alertType: alert.TypeMattermost, expected: alertingConfig.Mattermost}, + {alertType: alert.TypeMessagebird, expected: alertingConfig.Messagebird}, + {alertType: alert.TypeNtfy, expected: alertingConfig.Ntfy}, + {alertType: alert.TypeOpsgenie, expected: alertingConfig.Opsgenie}, + {alertType: alert.TypePagerDuty, expected: alertingConfig.PagerDuty}, + {alertType: alert.TypeSlack, expected: alertingConfig.Slack}, + {alertType: alert.TypeTelegram, expected: alertingConfig.Telegram}, + {alertType: alert.TypeTwilio, expected: alertingConfig.Twilio}, + {alertType: alert.TypeTeams, expected: alertingConfig.Teams}, } - if alertingConfig.GetAlertingProviderByAlertType(alert.TypeDiscord) != alertingConfig.Discord { - t.Error("expected Discord configuration") - } - if alertingConfig.GetAlertingProviderByAlertType(alert.TypeMattermost) != alertingConfig.Mattermost { - t.Error("expected Mattermost configuration") - } - if alertingConfig.GetAlertingProviderByAlertType(alert.TypeMessagebird) != alertingConfig.Messagebird { - t.Error("expected Messagebird configuration") - } - if alertingConfig.GetAlertingProviderByAlertType(alert.TypePagerDuty) != alertingConfig.PagerDuty { - t.Error("expected PagerDuty configuration") - } - if alertingConfig.GetAlertingProviderByAlertType(alert.TypeSlack) != alertingConfig.Slack { - t.Error("expected Slack configuration") - } - if alertingConfig.GetAlertingProviderByAlertType(alert.TypeTelegram) != alertingConfig.Telegram { - t.Error("expected Telegram configuration") - } - if alertingConfig.GetAlertingProviderByAlertType(alert.TypeTwilio) != alertingConfig.Twilio { - t.Error("expected Twilio configuration") - } - if alertingConfig.GetAlertingProviderByAlertType(alert.TypeTeams) != alertingConfig.Teams { - t.Error("expected Teams configuration") - } -} - -// XXX: Remove this in v5.0.0 -func TestParseAndValidateConfigBytes_backwardCompatibleWithServices(t *testing.T) { - config, err := parseAndValidateConfigBytes([]byte(` -services: - - name: website - url: https://twin.sh/actuator/health - conditions: - - "[STATUS] == 200" -`)) - if err != nil { - t.Error("expected no error, got", err.Error()) - } - if config == nil { - t.Fatal("Config shouldn't have been nil") - } - if config.Endpoints[0].URL != "https://twin.sh/actuator/health" { - t.Errorf("URL should have been %s", "https://twin.sh/actuator/health") - } - if config.Endpoints[0].Interval != 60*time.Second { - t.Errorf("Interval should have been %s, because it is the default value", 60*time.Second) - } -} - -// XXX: Remove this in v5.0.0 -func TestParseAndValidateConfigBytes_backwardCompatibleMergeServicesInEndpoints(t *testing.T) { - config, err := parseAndValidateConfigBytes([]byte(` -services: - - name: website1 - url: https://twin.sh/actuator/health - conditions: - - "[STATUS] == 200" -endpoints: - - name: website2 - url: https://twin.sh/actuator/health - conditions: - - "[STATUS] == 200" -`)) - if err != nil { - t.Error("expected no error, got", err.Error()) - } - if config == nil { - t.Fatal("Config shouldn't have been nil") - } - if len(config.Endpoints) != 2 { - t.Error("services should've been merged in endpoints") + for _, scenario := range scenarios { + t.Run(string(scenario.alertType), func(t *testing.T) { + if alertingConfig.GetAlertingProviderByAlertType(scenario.alertType) != scenario.expected { + t.Errorf("expected %s configuration", scenario.alertType) + } + }) } }