Closes #308 Work remaining: - Add the documentation on the README.md - Test it with an actual Ntfy instance (I've only used https://ntfy.sh/docs/examples/#gatus as a reference; I haven't actually tested it yet)
		
			
				
	
	
		
			157 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package alerting
 | |
| 
 | |
| import (
 | |
| 	"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"
 | |
| 	"github.com/TwiN/gatus/v4/alerting/provider/telegram"
 | |
| 	"github.com/TwiN/gatus/v4/alerting/provider/twilio"
 | |
| )
 | |
| 
 | |
| // Config is the configuration for alerting providers
 | |
| type Config struct {
 | |
| 	// Custom is the configuration for the custom alerting provider
 | |
| 	Custom *custom.AlertProvider `yaml:"custom,omitempty"`
 | |
| 
 | |
| 	// googlechat is the configuration for the Google chat alerting provider
 | |
| 	GoogleChat *googlechat.AlertProvider `yaml:"googlechat,omitempty"`
 | |
| 
 | |
| 	// Discord is the configuration for the discord alerting provider
 | |
| 	Discord *discord.AlertProvider `yaml:"discord,omitempty"`
 | |
| 
 | |
| 	// Email is the configuration for the email alerting provider
 | |
| 	Email *email.AlertProvider `yaml:"email,omitempty"`
 | |
| 
 | |
| 	// Matrix is the configuration for the matrix alerting provider
 | |
| 	Matrix *matrix.AlertProvider `yaml:"matrix,omitempty"`
 | |
| 
 | |
| 	// Mattermost is the configuration for the mattermost alerting provider
 | |
| 	Mattermost *mattermost.AlertProvider `yaml:"mattermost,omitempty"`
 | |
| 
 | |
| 	// Messagebird is the configuration for the messagebird alerting provider
 | |
| 	Messagebird *messagebird.AlertProvider `yaml:"messagebird,omitempty"`
 | |
| 
 | |
| 	// Ntfy is the configuration for the ntfy alerting provider
 | |
| 	Ntfy *ntfy.AlertProvider `yaml:"ntfy,omitempty"`
 | |
| 
 | |
| 	// Opsgenie is the configuration for the opsgenie alerting provider
 | |
| 	Opsgenie *opsgenie.AlertProvider `yaml:"opsgenie,omitempty"`
 | |
| 
 | |
| 	// PagerDuty is the configuration for the pagerduty alerting provider
 | |
| 	PagerDuty *pagerduty.AlertProvider `yaml:"pagerduty,omitempty"`
 | |
| 
 | |
| 	// Slack is the configuration for the slack alerting provider
 | |
| 	Slack *slack.AlertProvider `yaml:"slack,omitempty"`
 | |
| 
 | |
| 	// Teams is the configuration for the teams alerting provider
 | |
| 	Teams *teams.AlertProvider `yaml:"teams,omitempty"`
 | |
| 
 | |
| 	// Telegram is the configuration for the telegram alerting provider
 | |
| 	Telegram *telegram.AlertProvider `yaml:"telegram,omitempty"`
 | |
| 
 | |
| 	// Twilio is the configuration for the twilio alerting provider
 | |
| 	Twilio *twilio.AlertProvider `yaml:"twilio,omitempty"`
 | |
| }
 | |
| 
 | |
| // GetAlertingProviderByAlertType returns an provider.AlertProvider by its corresponding alert.Type
 | |
| func (config Config) GetAlertingProviderByAlertType(alertType alert.Type) provider.AlertProvider {
 | |
| 	switch alertType {
 | |
| 	case alert.TypeCustom:
 | |
| 		if config.Custom == nil {
 | |
| 			// Since we're returning an interface, we need to explicitly return nil, even if the provider itself is nil
 | |
| 			return nil
 | |
| 		}
 | |
| 		return config.Custom
 | |
| 	case alert.TypeDiscord:
 | |
| 		if config.Discord == nil {
 | |
| 			// Since we're returning an interface, we need to explicitly return nil, even if the provider itself is nil
 | |
| 			return nil
 | |
| 		}
 | |
| 		return config.Discord
 | |
| 	case alert.TypeEmail:
 | |
| 		if config.Email == nil {
 | |
| 			// Since we're returning an interface, we need to explicitly return nil, even if the provider itself is nil
 | |
| 			return nil
 | |
| 		}
 | |
| 		return config.Email
 | |
| 	case alert.TypeGoogleChat:
 | |
| 		if config.GoogleChat == nil {
 | |
| 			// Since we're returning an interface, we need to explicitly return nil, even if the provider itself is nil
 | |
| 			return nil
 | |
| 		}
 | |
| 		return config.GoogleChat
 | |
| 	case alert.TypeMatrix:
 | |
| 		if config.Matrix == nil {
 | |
| 			// Since we're returning an interface, we need to explicitly return nil, even if the provider itself is nil
 | |
| 			return nil
 | |
| 		}
 | |
| 		return config.Matrix
 | |
| 	case alert.TypeMattermost:
 | |
| 		if config.Mattermost == nil {
 | |
| 			// Since we're returning an interface, we need to explicitly return nil, even if the provider itself is nil
 | |
| 			return nil
 | |
| 		}
 | |
| 		return config.Mattermost
 | |
| 	case alert.TypeMessagebird:
 | |
| 		if config.Messagebird == nil {
 | |
| 			// Since we're returning an interface, we need to explicitly return nil, even if the provider itself is nil
 | |
| 			return nil
 | |
| 		}
 | |
| 		return config.Messagebird
 | |
| 	case alert.TypeNtfy:
 | |
| 		if config.Ntfy == nil {
 | |
| 			// Since we're returning an interface, we need to explicitly return nil, even if the provider itself is nil
 | |
| 			return nil
 | |
| 		}
 | |
| 		return config.Ntfy
 | |
| 	case alert.TypeOpsgenie:
 | |
| 		if config.Opsgenie == nil {
 | |
| 			// Since we're returning an interface, we need to explicitly return nil, even if the provider itself is nil
 | |
| 			return nil
 | |
| 		}
 | |
| 		return config.Opsgenie
 | |
| 	case alert.TypePagerDuty:
 | |
| 		if config.PagerDuty == nil {
 | |
| 			// Since we're returning an interface, we need to explicitly return nil, even if the provider itself is nil
 | |
| 			return nil
 | |
| 		}
 | |
| 		return config.PagerDuty
 | |
| 	case alert.TypeSlack:
 | |
| 		if config.Slack == nil {
 | |
| 			// Since we're returning an interface, we need to explicitly return nil, even if the provider itself is nil
 | |
| 			return nil
 | |
| 		}
 | |
| 		return config.Slack
 | |
| 	case alert.TypeTeams:
 | |
| 		if config.Teams == nil {
 | |
| 			// Since we're returning an interface, we need to explicitly return nil, even if the provider itself is nil
 | |
| 			return nil
 | |
| 		}
 | |
| 		return config.Teams
 | |
| 	case alert.TypeTelegram:
 | |
| 		if config.Telegram == nil {
 | |
| 			// Since we're returning an interface, we need to explicitly return nil, even if the provider itself is nil
 | |
| 			return nil
 | |
| 		}
 | |
| 		return config.Telegram
 | |
| 	case alert.TypeTwilio:
 | |
| 		if config.Twilio == nil {
 | |
| 			// Since we're returning an interface, we need to explicitly return nil, even if the provider itself is nil
 | |
| 			return nil
 | |
| 		}
 | |
| 		return config.Twilio
 | |
| 	}
 | |
| 	return nil
 | |
| }
 |