Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 52 additions & 2 deletions definition/alertmanager.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,22 @@ import (
"github.com/prometheus/alertmanager/config"
"github.com/prometheus/alertmanager/pkg/labels"
"github.com/prometheus/common/model"

discord_v0mimir1 "github.com/grafana/alerting/receivers/discord/v0mimir1"
email_v0mimir1 "github.com/grafana/alerting/receivers/email/v0mimir1"
jira_v0mimir1 "github.com/grafana/alerting/receivers/jira/v0mimir1"
opsgenie_v0mimir1 "github.com/grafana/alerting/receivers/opsgenie/v0mimir1"
pagerduty_v0mimir1 "github.com/grafana/alerting/receivers/pagerduty/v0mimir1"
pushover_v0mimir1 "github.com/grafana/alerting/receivers/pushover/v0mimir1"
slack_v0mimir1 "github.com/grafana/alerting/receivers/slack/v0mimir1"
sns_v0mimir1 "github.com/grafana/alerting/receivers/sns/v0mimir1"
teams_v0mimir1 "github.com/grafana/alerting/receivers/teams/v0mimir1"
teams_v0mimir2 "github.com/grafana/alerting/receivers/teams/v0mimir2"
telegram_v0mimir1 "github.com/grafana/alerting/receivers/telegram/v0mimir1"
victorops_v0mimir1 "github.com/grafana/alerting/receivers/victorops/v0mimir1"
webex_v0mimir1 "github.com/grafana/alerting/receivers/webex/v0mimir1"
webhook_v0mimir1 "github.com/grafana/alerting/receivers/webhook/v0mimir1"
wechat_v0mimir1 "github.com/grafana/alerting/receivers/wechat/v0mimir1"
)

type Provenance string
Expand Down Expand Up @@ -499,7 +515,7 @@ func (m ObjectMatchers) MarshalJSON() ([]byte, error) {

// nolint:revive
type PostableApiReceiver struct {
config.Receiver `yaml:",inline"`
Receiver `yaml:",inline"`
PostableGrafanaReceivers `yaml:",inline"`
}

Expand All @@ -512,7 +528,7 @@ func (r *PostableApiReceiver) UnmarshalYAML(unmarshal func(interface{}) error) e
return err
}

type plain config.Receiver
type plain Receiver
if err := unmarshal((*plain)(&r.Receiver)); err != nil {
return err
}
Expand Down Expand Up @@ -623,3 +639,37 @@ type TemplateKind string

const GrafanaTemplateKind TemplateKind = "grafana"
const MimirTemplateKind TemplateKind = "mimir"

// Receiver configuration provides configuration on how to contact a receiver.
type Receiver struct {
// A unique identifier for this receiver.
Name string `yaml:"name" json:"name"`

DiscordConfigs []*discord_v0mimir1.Config `yaml:"discord_configs,omitempty" json:"discord_configs,omitempty"`
EmailConfigs []*email_v0mimir1.Config `yaml:"email_configs,omitempty" json:"email_configs,omitempty"`
PagerdutyConfigs []*pagerduty_v0mimir1.Config `yaml:"pagerduty_configs,omitempty" json:"pagerduty_configs,omitempty"`
SlackConfigs []*slack_v0mimir1.Config `yaml:"slack_configs,omitempty" json:"slack_configs,omitempty"`
WebhookConfigs []*webhook_v0mimir1.Config `yaml:"webhook_configs,omitempty" json:"webhook_configs,omitempty"`
OpsGenieConfigs []*opsgenie_v0mimir1.Config `yaml:"opsgenie_configs,omitempty" json:"opsgenie_configs,omitempty"`
WechatConfigs []*wechat_v0mimir1.Config `yaml:"wechat_configs,omitempty" json:"wechat_configs,omitempty"`
PushoverConfigs []*pushover_v0mimir1.Config `yaml:"pushover_configs,omitempty" json:"pushover_configs,omitempty"`
VictorOpsConfigs []*victorops_v0mimir1.Config `yaml:"victorops_configs,omitempty" json:"victorops_configs,omitempty"`
SNSConfigs []*sns_v0mimir1.Config `yaml:"sns_configs,omitempty" json:"sns_configs,omitempty"`
TelegramConfigs []*telegram_v0mimir1.Config `yaml:"telegram_configs,omitempty" json:"telegram_configs,omitempty"`
WebexConfigs []*webex_v0mimir1.Config `yaml:"webex_configs,omitempty" json:"webex_configs,omitempty"`
MSTeamsConfigs []*teams_v0mimir1.Config `yaml:"msteams_configs,omitempty" json:"msteams_configs,omitempty"`
MSTeamsV2Configs []*teams_v0mimir2.Config `yaml:"msteamsv2_configs,omitempty" json:"msteamsv2_configs,omitempty"`
JiraConfigs []*jira_v0mimir1.Config `yaml:"jira_configs,omitempty" json:"jira_configs,omitempty"`
}
Comment thread
cursor[bot] marked this conversation as resolved.

// UnmarshalYAML implements the yaml.Unmarshaler interface for Receiver.
func (c *Receiver) UnmarshalYAML(unmarshal func(interface{}) error) error {
type plain Receiver
if err := unmarshal((*plain)(c)); err != nil {
return err
}
if c.Name == "" {
return fmt.Errorf("missing name in receiver")
}
return nil
}
71 changes: 37 additions & 34 deletions definition/alertmanager_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ import (
"github.com/prometheus/alertmanager/featurecontrol"
"github.com/prometheus/alertmanager/matchers/compat"
"github.com/prometheus/alertmanager/pkg/labels"

email_v0mimir1 "github.com/grafana/alerting/receivers/email/v0mimir1"
slack_v0mimir1 "github.com/grafana/alerting/receivers/slack/v0mimir1"
)

func Test_ApiReceiver_Marshaling(t *testing.T) {
Expand All @@ -26,11 +29,11 @@ func Test_ApiReceiver_Marshaling(t *testing.T) {
{
desc: "success AM",
input: PostableApiReceiver{
Receiver: config.Receiver{
Receiver: Receiver{
Name: "foo",
EmailConfigs: []*config.EmailConfig{{
EmailConfigs: []*email_v0mimir1.Config{{
To: "test@test.com",
HTML: config.DefaultEmailConfig.HTML,
HTML: email_v0mimir1.DefaultConfig.HTML,
Headers: map[string]string{},
}},
},
Expand All @@ -39,7 +42,7 @@ func Test_ApiReceiver_Marshaling(t *testing.T) {
{
desc: "success GM",
input: PostableApiReceiver{
Receiver: config.Receiver{
Receiver: Receiver{
Name: "foo",
},
PostableGrafanaReceivers: PostableGrafanaReceivers{
Expand Down Expand Up @@ -114,9 +117,9 @@ func Test_ApiAlertingConfig_Marshaling(t *testing.T) {
},
Receivers: []*PostableApiReceiver{
{
Receiver: config.Receiver{
Receiver: Receiver{
Name: "am",
EmailConfigs: []*config.EmailConfig{{
EmailConfigs: []*email_v0mimir1.Config{{
Smarthost: config.HostPort{
Host: "test",
Port: "567",
Expand All @@ -125,7 +128,7 @@ func Test_ApiAlertingConfig_Marshaling(t *testing.T) {
RequireTLS: func() *bool { b := true; return &b }(),
From: "grafana",
To: "test@test.com",
HTML: config.DefaultEmailConfig.HTML,
HTML: email_v0mimir1.DefaultConfig.HTML,
Headers: map[string]string{},
}},
},
Expand All @@ -149,7 +152,7 @@ func Test_ApiAlertingConfig_Marshaling(t *testing.T) {
},
Receivers: []*PostableApiReceiver{
{
Receiver: config.Receiver{
Receiver: Receiver{
Name: "graf",
},
PostableGrafanaReceivers: PostableGrafanaReceivers{
Expand All @@ -175,11 +178,11 @@ func Test_ApiAlertingConfig_Marshaling(t *testing.T) {
},
Receivers: []*PostableApiReceiver{
{
Receiver: config.Receiver{
Receiver: Receiver{
Name: "am",
EmailConfigs: []*config.EmailConfig{{
EmailConfigs: []*email_v0mimir1.Config{{
To: "test@test.com",
HTML: config.DefaultEmailConfig.HTML,
HTML: email_v0mimir1.DefaultConfig.HTML,
Headers: map[string]string{},
}},
},
Expand All @@ -204,7 +207,7 @@ func Test_ApiAlertingConfig_Marshaling(t *testing.T) {
},
Receivers: []*PostableApiReceiver{
{
Receiver: config.Receiver{
Receiver: Receiver{
Name: "graf",
},
PostableGrafanaReceivers: PostableGrafanaReceivers{
Expand All @@ -220,7 +223,7 @@ func Test_ApiAlertingConfig_Marshaling(t *testing.T) {
input: PostableApiAlertingConfig{
Receivers: []*PostableApiReceiver{
{
Receiver: config.Receiver{
Receiver: Receiver{
Name: "graf",
},
PostableGrafanaReceivers: PostableGrafanaReceivers{
Expand All @@ -246,7 +249,7 @@ func Test_ApiAlertingConfig_Marshaling(t *testing.T) {
},
Receivers: []*PostableApiReceiver{
{
Receiver: config.Receiver{
Receiver: Receiver{
Name: "graf",
},
PostableGrafanaReceivers: PostableGrafanaReceivers{
Expand Down Expand Up @@ -274,7 +277,7 @@ func Test_ApiAlertingConfig_Marshaling(t *testing.T) {
},
Receivers: []*PostableApiReceiver{
{
Receiver: config.Receiver{
Receiver: Receiver{
Name: "graf",
},
PostableGrafanaReceivers: PostableGrafanaReceivers{
Expand Down Expand Up @@ -302,7 +305,7 @@ func Test_ApiAlertingConfig_Marshaling(t *testing.T) {
},
Receivers: []*PostableApiReceiver{
{
Receiver: config.Receiver{
Receiver: Receiver{
Name: "graf",
},
PostableGrafanaReceivers: PostableGrafanaReceivers{
Expand Down Expand Up @@ -340,9 +343,9 @@ func Test_ApiAlertingConfig_Marshaling(t *testing.T) {
},
Receivers: []*PostableApiReceiver{
{
Receiver: config.Receiver{
Receiver: Receiver{
Name: "am",
EmailConfigs: []*config.EmailConfig{{
EmailConfigs: []*email_v0mimir1.Config{{
Smarthost: config.HostPort{
Host: "test",
Port: "567",
Expand All @@ -351,7 +354,7 @@ func Test_ApiAlertingConfig_Marshaling(t *testing.T) {
RequireTLS: func() *bool { b := true; return &b }(),
From: "grafana",
To: "test@test.com",
HTML: config.DefaultEmailConfig.HTML,
HTML: email_v0mimir1.DefaultConfig.HTML,
Headers: map[string]string{},
}},
},
Expand Down Expand Up @@ -387,7 +390,7 @@ func Test_ApiAlertingConfig_Marshaling(t *testing.T) {
},
Receivers: []*PostableApiReceiver{
{
Receiver: config.Receiver{
Receiver: Receiver{
Name: "graf",
},
PostableGrafanaReceivers: PostableGrafanaReceivers{
Expand Down Expand Up @@ -1433,11 +1436,11 @@ func TestPostableApiTemplateValidate(t *testing.T) {
}

func TestCopyIntegrations(t *testing.T) {
mimirEmail := &config.EmailConfig{
mimirEmail := &email_v0mimir1.Config{
From: "test",
To: "test",
}
mimirSlack := &config.SlackConfig{
mimirSlack := &slack_v0mimir1.Config{
Title: "test",
}
grafana := &PostableGrafanaReceiver{
Expand All @@ -1455,12 +1458,12 @@ func TestCopyIntegrations(t *testing.T) {
t.Run("should copy all integrations from src to dest by reference", func(t *testing.T) {
dst := PostableApiReceiver{}
src := PostableApiReceiver{
Receiver: config.Receiver{
Receiver: Receiver{
Name: "source",
EmailConfigs: []*config.EmailConfig{
EmailConfigs: []*email_v0mimir1.Config{
mimirEmail,
},
SlackConfigs: []*config.SlackConfig{
SlackConfigs: []*slack_v0mimir1.Config{
mimirSlack,
},
},
Expand All @@ -1472,11 +1475,11 @@ func TestCopyIntegrations(t *testing.T) {
}
require.NoError(t, CopyIntegrations(&src, &dst))
require.Equal(t, PostableApiReceiver{
Receiver: config.Receiver{
EmailConfigs: []*config.EmailConfig{
Receiver: Receiver{
EmailConfigs: []*email_v0mimir1.Config{
mimirEmail,
},
SlackConfigs: []*config.SlackConfig{
SlackConfigs: []*slack_v0mimir1.Config{
mimirSlack,
},
},
Expand All @@ -1493,9 +1496,9 @@ func TestCopyIntegrations(t *testing.T) {

t.Run("should append to existing integrations", func(t *testing.T) {
dst := PostableApiReceiver{
Receiver: config.Receiver{
Receiver: Receiver{
Name: "dest",
SlackConfigs: []*config.SlackConfig{
SlackConfigs: []*slack_v0mimir1.Config{
mimirSlack,
},
},
Expand All @@ -1506,9 +1509,9 @@ func TestCopyIntegrations(t *testing.T) {
},
}
src := PostableApiReceiver{
Receiver: config.Receiver{
Receiver: Receiver{
Name: "source",
SlackConfigs: []*config.SlackConfig{
SlackConfigs: []*slack_v0mimir1.Config{
mimirSlack,
},
},
Expand All @@ -1520,9 +1523,9 @@ func TestCopyIntegrations(t *testing.T) {
}
require.NoError(t, CopyIntegrations(&src, &dst))
require.Equal(t, PostableApiReceiver{
Receiver: config.Receiver{
Receiver: Receiver{
Name: "dest",
SlackConfigs: []*config.SlackConfig{
SlackConfigs: []*slack_v0mimir1.Config{
mimirSlack,
mimirSlack,
},
Expand Down
Loading