Alerting: Support custom API URL for PagerDuty integration (#88007)

* fix assert in LINE
* fix pagerduty asserts

---------

Co-authored-by: Yuri Tseretyan <yuriy.tseretyan@grafana.com>
This commit is contained in:
Gaurav Agrawal 2024-05-23 01:01:55 +05:30 committed by GitHub
parent c706166a24
commit fdaa091a4d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 21 additions and 10 deletions

2
go.mod
View File

@ -86,7 +86,7 @@ require (
github.com/googleapis/gax-go/v2 v2.12.3 // @grafana/grafana-backend-group github.com/googleapis/gax-go/v2 v2.12.3 // @grafana/grafana-backend-group
github.com/gorilla/mux v1.8.1 // @grafana/grafana-backend-group github.com/gorilla/mux v1.8.1 // @grafana/grafana-backend-group
github.com/gorilla/websocket v1.5.0 // @grafana/grafana-app-platform-squad github.com/gorilla/websocket v1.5.0 // @grafana/grafana-app-platform-squad
github.com/grafana/alerting v0.0.0-20240424080142-bb4f4f429d36 // @grafana/alerting-squad-backend github.com/grafana/alerting v0.0.0-20240517150520-282da04de5ed // @grafana/alerting-squad-backend
github.com/grafana/authlib v0.0.0-20240515154731-fe4779055ef4 // @grafana/identity-access-team github.com/grafana/authlib v0.0.0-20240515154731-fe4779055ef4 // @grafana/identity-access-team
github.com/grafana/codejen v0.0.3 // @grafana/dataviz-squad github.com/grafana/codejen v0.0.3 // @grafana/dataviz-squad
github.com/grafana/cuetsy v0.1.11 // @grafana/grafana-as-code github.com/grafana/cuetsy v0.1.11 // @grafana/grafana-as-code

2
go.sum
View File

@ -2152,6 +2152,8 @@ github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWm
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grafana/alerting v0.0.0-20240424080142-bb4f4f429d36 h1:v4aQ0cde8SCzNRrD2RczzmFolEkXWriSY9tKakAD0ng= github.com/grafana/alerting v0.0.0-20240424080142-bb4f4f429d36 h1:v4aQ0cde8SCzNRrD2RczzmFolEkXWriSY9tKakAD0ng=
github.com/grafana/alerting v0.0.0-20240424080142-bb4f4f429d36/go.mod h1:8nOsn7PWmttOmWiR7bvYIl3VLl+tIq72ZF+1y54w36M= github.com/grafana/alerting v0.0.0-20240424080142-bb4f4f429d36/go.mod h1:8nOsn7PWmttOmWiR7bvYIl3VLl+tIq72ZF+1y54w36M=
github.com/grafana/alerting v0.0.0-20240517150520-282da04de5ed h1:D03maWtjam4nErgyDfJyI45cg5UtzxiBsCi3hJWICd8=
github.com/grafana/alerting v0.0.0-20240517150520-282da04de5ed/go.mod h1:8nOsn7PWmttOmWiR7bvYIl3VLl+tIq72ZF+1y54w36M=
github.com/grafana/authlib v0.0.0-20240515154731-fe4779055ef4 h1:Bfa397TXkM0X97MhbCC+fNSwVtg21c0Mg5STes1dRug= github.com/grafana/authlib v0.0.0-20240515154731-fe4779055ef4 h1:Bfa397TXkM0X97MhbCC+fNSwVtg21c0Mg5STes1dRug=
github.com/grafana/authlib v0.0.0-20240515154731-fe4779055ef4/go.mod h1:86rRD5P6u2JPWtNWTMOlqlU+YMv2fUvVz/DomA6L7w4= github.com/grafana/authlib v0.0.0-20240515154731-fe4779055ef4/go.mod h1:86rRD5P6u2JPWtNWTMOlqlU+YMv2fUvVz/DomA6L7w4=
github.com/grafana/codejen v0.0.3 h1:tAWxoTUuhgmEqxJPOLtJoxlPBbMULFwKFOcRsPRPXDw= github.com/grafana/codejen v0.0.3 h1:tAWxoTUuhgmEqxJPOLtJoxlPBbMULFwKFOcRsPRPXDw=

View File

@ -135,6 +135,7 @@ type PagerdutyIntegration struct {
Client *string `json:"client,omitempty" yaml:"client,omitempty" hcl:"client"` Client *string `json:"client,omitempty" yaml:"client,omitempty" hcl:"client"`
ClientURL *string `json:"client_url,omitempty" yaml:"client_url,omitempty" hcl:"client_url"` ClientURL *string `json:"client_url,omitempty" yaml:"client_url,omitempty" hcl:"client_url"`
Details *map[string]string `json:"details,omitempty" yaml:"details,omitempty" hcl:"details"` Details *map[string]string `json:"details,omitempty" yaml:"details,omitempty" hcl:"details"`
URL *string `json:"url,omitempty" yaml:"url,omitempty" hcl:"url"`
} }
type PushoverIntegration struct { type PushoverIntegration struct {

View File

@ -6,6 +6,7 @@ import (
"strings" "strings"
alertingOpsgenie "github.com/grafana/alerting/receivers/opsgenie" alertingOpsgenie "github.com/grafana/alerting/receivers/opsgenie"
alertingPagerduty "github.com/grafana/alerting/receivers/pagerduty"
alertingTemplates "github.com/grafana/alerting/templates" alertingTemplates "github.com/grafana/alerting/templates"
) )
@ -363,6 +364,14 @@ func GetAvailableNotifiers() []*NotifierPlugin {
InputType: InputTypeText, InputType: InputTypeText,
PropertyName: "details", PropertyName: "details",
}, },
{ //New in 11.1
Label: "URL",
Description: "The URL to send API requests to",
Element: ElementTypeInput,
InputType: InputTypeText,
Placeholder: alertingPagerduty.DefaultURL,
PropertyName: "url",
},
}, },
}, },
{ {

View File

@ -18,7 +18,6 @@ import (
"github.com/grafana/alerting/receivers" "github.com/grafana/alerting/receivers"
alertingLine "github.com/grafana/alerting/receivers/line" alertingLine "github.com/grafana/alerting/receivers/line"
alertingPagerduty "github.com/grafana/alerting/receivers/pagerduty"
alertingPushover "github.com/grafana/alerting/receivers/pushover" alertingPushover "github.com/grafana/alerting/receivers/pushover"
alertingSlack "github.com/grafana/alerting/receivers/slack" alertingSlack "github.com/grafana/alerting/receivers/slack"
alertingTelegram "github.com/grafana/alerting/receivers/telegram" alertingTelegram "github.com/grafana/alerting/receivers/telegram"
@ -913,19 +912,17 @@ func TestIntegrationNotificationChannels(t *testing.T) {
mockChannel.responses["slack_recvX"] = `{"ok": true}` mockChannel.responses["slack_recvX"] = `{"ok": true}`
// Overriding some URLs to send to the mock channel. // Overriding some URLs to send to the mock channel.
os, opa, ot, opu, ogb, ol, oth := alertingSlack.APIURL, alertingPagerduty.APIURL, os, ot, opu, ogb, ol, oth := alertingSlack.APIURL,
alertingTelegram.APIURL, alertingPushover.APIURL, receivers.GetBoundary, alertingTelegram.APIURL, alertingPushover.APIURL, receivers.GetBoundary,
alertingLine.APIURL, alertingThreema.APIURL alertingLine.APIURL, alertingThreema.APIURL
originalTemplate := alertingTemplates.DefaultTemplateString originalTemplate := alertingTemplates.DefaultTemplateString
t.Cleanup(func() { t.Cleanup(func() {
alertingSlack.APIURL, alertingPagerduty.APIURL, alertingSlack.APIURL, alertingTelegram.APIURL, alertingPushover.APIURL, receivers.GetBoundary,
alertingTelegram.APIURL, alertingPushover.APIURL, receivers.GetBoundary, alertingLine.APIURL, alertingThreema.APIURL = os, ot, opu, ogb, ol, oth
alertingLine.APIURL, alertingThreema.APIURL = os, opa, ot, opu, ogb, ol, oth
alertingTemplates.DefaultTemplateString = originalTemplate alertingTemplates.DefaultTemplateString = originalTemplate
}) })
alertingTemplates.DefaultTemplateString = alertingTemplates.TemplateForTestsString alertingTemplates.DefaultTemplateString = alertingTemplates.TemplateForTestsString
alertingSlack.APIURL = fmt.Sprintf("http://%s/slack_recvX/slack_testX", mockChannel.server.Addr) alertingSlack.APIURL = fmt.Sprintf("http://%s/slack_recvX/slack_testX", mockChannel.server.Addr)
alertingPagerduty.APIURL = fmt.Sprintf("http://%s/pagerduty_recvX/pagerduty_testX", mockChannel.server.Addr)
alertingTelegram.APIURL = fmt.Sprintf("http://%s/telegram_recv/bot%%s/%%s", mockChannel.server.Addr) alertingTelegram.APIURL = fmt.Sprintf("http://%s/telegram_recv/bot%%s/%%s", mockChannel.server.Addr)
alertingPushover.APIURL = fmt.Sprintf("http://%s/pushover_recv/pushover_test", mockChannel.server.Addr) alertingPushover.APIURL = fmt.Sprintf("http://%s/pushover_recv/pushover_test", mockChannel.server.Addr)
alertingLine.APIURL = fmt.Sprintf("http://%s/line_recv/line_test", mockChannel.server.Addr) alertingLine.APIURL = fmt.Sprintf("http://%s/line_recv/line_test", mockChannel.server.Addr)
@ -1902,7 +1899,8 @@ const alertmanagerConfig = `
"class": "testclass", "class": "testclass",
"component": "Integration Test", "component": "Integration Test",
"group": "testgroup", "group": "testgroup",
"summary": "Integration Test {{ template \"pagerduty.default.description\" . }}" "summary": "Integration Test {{ template \"pagerduty.default.description\" . }}",
"url": "http://CHANNEL_ADDR/pagerduty_recvX/pagerduty_testX"
}, },
"secureSettings": { "secureSettings": {
"integrationKey": "pagerduty_recv/pagerduty_test" "integrationKey": "pagerduty_recv/pagerduty_test"
@ -2467,7 +2465,8 @@ var expAlertmanagerConfigFromAPI = `
"component": "Integration Test", "component": "Integration Test",
"group": "testgroup", "group": "testgroup",
"severity": "warning", "severity": "warning",
"summary": "Integration Test {{ template \"pagerduty.default.description\" . }}" "summary": "Integration Test {{ template \"pagerduty.default.description\" . }}",
"url": "http://CHANNEL_ADDR/pagerduty_recvX/pagerduty_testX"
}, },
"secureFields": { "secureFields": {
"integrationKey": true "integrationKey": true
@ -2794,7 +2793,7 @@ var expNonEmailNotifications = map[string][]string{
}`, }`,
}, },
"line_recv/line_test": { "line_recv/line_test": {
`message=%5BFIRING%3A1%5D+LineAlert+%28default%29%0Ahttp%3A%2Flocalhost%3A3000%2Falerting%2Flist%0A%0A%2A%2AFiring%2A%2A%0A%0AValue%3A+A%3D1%0ALabels%3A%0A+-+alertname+%3D+LineAlert%0A+-+grafana_folder+%3D+default%0AAnnotations%3A%0ASource%3A+http%3A%2F%2Flocalhost%3A3000%2Falerting%2Fgrafana%2FUID_LineAlert%2Fview%3ForgId%3D1%0ASilence%3A+http%3A%2F%2Flocalhost%3A3000%2Falerting%2Fsilence%2Fnew%3Falertmanager%3Dgrafana%26matcher%3Dalertname%253DLineAlert%26matcher%3Dgrafana_folder%253Ddefault%26orgId%3D1%0A`, `message=%5BFIRING%3A1%5D+LineAlert+%28default%29%0A%2A%2AFiring%2A%2A%0A%0AValue%3A+A%3D1%0ALabels%3A%0A+-+alertname+%3D+LineAlert%0A+-+grafana_folder+%3D+default%0AAnnotations%3A%0ASource%3A+http%3A%2F%2Flocalhost%3A3000%2Falerting%2Fgrafana%2FUID_LineAlert%2Fview%3ForgId%3D1%0ASilence%3A+http%3A%2F%2Flocalhost%3A3000%2Falerting%2Fsilence%2Fnew%3Falertmanager%3Dgrafana%26matcher%3Dalertname%253DLineAlert%26matcher%3Dgrafana_folder%253Ddefault%26orgId%3D1%0A`,
}, },
"threema_recv/threema_test": { "threema_recv/threema_test": {
`from=%2A1234567&secret=myapisecret&text=%E2%9A%A0%EF%B8%8F+%5BFIRING%3A1%5D+ThreemaAlert+%28default%29%0A%0A%2AMessage%3A%2A%0A%2A%2AFiring%2A%2A%0A%0AValue%3A+A%3D1%0ALabels%3A%0A+-+alertname+%3D+ThreemaAlert%0A+-+grafana_folder+%3D+default%0AAnnotations%3A%0ASource%3A+http%3A%2F%2Flocalhost%3A3000%2Falerting%2Fgrafana%2FUID_ThreemaAlert%2Fview%3ForgId%3D1%0ASilence%3A+http%3A%2F%2Flocalhost%3A3000%2Falerting%2Fsilence%2Fnew%3Falertmanager%3Dgrafana%26matcher%3Dalertname%253DThreemaAlert%26matcher%3Dgrafana_folder%253Ddefault%26orgId%3D1%0A%0A%2AURL%3A%2A+http%3A%2Flocalhost%3A3000%2Falerting%2Flist%0A&to=abcdefgh`, `from=%2A1234567&secret=myapisecret&text=%E2%9A%A0%EF%B8%8F+%5BFIRING%3A1%5D+ThreemaAlert+%28default%29%0A%0A%2AMessage%3A%2A%0A%2A%2AFiring%2A%2A%0A%0AValue%3A+A%3D1%0ALabels%3A%0A+-+alertname+%3D+ThreemaAlert%0A+-+grafana_folder+%3D+default%0AAnnotations%3A%0ASource%3A+http%3A%2F%2Flocalhost%3A3000%2Falerting%2Fgrafana%2FUID_ThreemaAlert%2Fview%3ForgId%3D1%0ASilence%3A+http%3A%2F%2Flocalhost%3A3000%2Falerting%2Fsilence%2Fnew%3Falertmanager%3Dgrafana%26matcher%3Dalertname%253DThreemaAlert%26matcher%3Dgrafana_folder%253Ddefault%26orgId%3D1%0A%0A%2AURL%3A%2A+http%3A%2Flocalhost%3A3000%2Falerting%2Flist%0A&to=abcdefgh`,