mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Merge remote-tracking branch 'origin/main' into resource-store
This commit is contained in:
commit
fc82089987
2
go.mod
2
go.mod
@ -86,7 +86,7 @@ require (
|
||||
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/websocket v1.5.0 // @grafana/grafana-app-platform-squad
|
||||
github.com/grafana/alerting v0.0.0-20240606211712-071c8609797a // @grafana/alerting-backend
|
||||
github.com/grafana/alerting v0.0.0-20240607182251-835aff588914 // @grafana/alerting-backend
|
||||
github.com/grafana/authlib v0.0.0-20240611075137-331cbe4e840f // @grafana/identity-access-team
|
||||
github.com/grafana/codejen v0.0.3 // @grafana/dataviz-squad
|
||||
github.com/grafana/cuetsy v0.1.11 // @grafana/grafana-as-code
|
||||
|
4
go.sum
4
go.sum
@ -2305,8 +2305,8 @@ github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad
|
||||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
|
||||
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/grafana/alerting v0.0.0-20240606211712-071c8609797a h1:MvrEgxNxmUqaFWkBtRlbgxStbdD8FcmtjlRp98bmMJU=
|
||||
github.com/grafana/alerting v0.0.0-20240606211712-071c8609797a/go.mod h1:U7Ta3K4T7jVgqGSYuPsfuPKHFiL2GbCZSHa3nHjmCos=
|
||||
github.com/grafana/alerting v0.0.0-20240607182251-835aff588914 h1:WXLbSnnomltxdNcE20CI8RD8quZ/L0YpXP0WK+0S1BU=
|
||||
github.com/grafana/alerting v0.0.0-20240607182251-835aff588914/go.mod h1:U7Ta3K4T7jVgqGSYuPsfuPKHFiL2GbCZSHa3nHjmCos=
|
||||
github.com/grafana/authlib v0.0.0-20240611075137-331cbe4e840f h1:hvRCAv+TgcHu3i/Sd7lFJx84iEtgzDCYuk7OWeXatD0=
|
||||
github.com/grafana/authlib v0.0.0-20240611075137-331cbe4e840f/go.mod h1:+MjD5sxxgLOIvw0ox18wJmjBzz8tOECo7quiiZAmgJY=
|
||||
github.com/grafana/codejen v0.0.3 h1:tAWxoTUuhgmEqxJPOLtJoxlPBbMULFwKFOcRsPRPXDw=
|
||||
|
@ -15,6 +15,7 @@ import (
|
||||
"gopkg.in/yaml.v3"
|
||||
|
||||
"github.com/grafana/alerting/definition"
|
||||
alertingmodels "github.com/grafana/alerting/models"
|
||||
)
|
||||
|
||||
// swagger:route POST /alertmanager/grafana/config/api/v1/alerts alertmanager RoutePostGrafanaAlertingConfig
|
||||
@ -545,15 +546,15 @@ type AlertGroups = amv2.AlertGroups
|
||||
|
||||
type AlertGroup = amv2.AlertGroup
|
||||
|
||||
type Receiver = amv2.Receiver
|
||||
type Receiver = alertingmodels.Receiver
|
||||
|
||||
// swagger:response receiversResponse
|
||||
type ReceiversResponse struct {
|
||||
// in:body
|
||||
Body []amv2.Receiver
|
||||
Body []alertingmodels.Receiver
|
||||
}
|
||||
|
||||
type Integration = amv2.Integration
|
||||
type Integration = alertingmodels.Integration
|
||||
|
||||
// swagger:parameters RouteGetAMAlerts RouteGetAMAlertGroups RouteGetGrafanaAMAlerts RouteGetGrafanaAMAlertGroups
|
||||
type AlertsParams struct {
|
||||
|
@ -1,11 +1,14 @@
|
||||
// Code generated by mockery v2.42.1. DO NOT EDIT.
|
||||
// Code generated by mockery v2.43.2. DO NOT EDIT.
|
||||
|
||||
package alertmanager_mock
|
||||
|
||||
import (
|
||||
context "context"
|
||||
|
||||
alertingmodels "github.com/grafana/alerting/models"
|
||||
|
||||
definitions "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions"
|
||||
|
||||
mock "github.com/stretchr/testify/mock"
|
||||
|
||||
models "github.com/grafana/grafana/pkg/services/ngalert/models"
|
||||
@ -308,23 +311,23 @@ func (_c *AlertmanagerMock_GetAlerts_Call) RunAndReturn(run func(context.Context
|
||||
}
|
||||
|
||||
// GetReceivers provides a mock function with given fields: ctx
|
||||
func (_m *AlertmanagerMock) GetReceivers(ctx context.Context) ([]v2models.Receiver, error) {
|
||||
func (_m *AlertmanagerMock) GetReceivers(ctx context.Context) ([]alertingmodels.Receiver, error) {
|
||||
ret := _m.Called(ctx)
|
||||
|
||||
if len(ret) == 0 {
|
||||
panic("no return value specified for GetReceivers")
|
||||
}
|
||||
|
||||
var r0 []v2models.Receiver
|
||||
var r0 []alertingmodels.Receiver
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(0).(func(context.Context) ([]v2models.Receiver, error)); ok {
|
||||
if rf, ok := ret.Get(0).(func(context.Context) ([]alertingmodels.Receiver, error)); ok {
|
||||
return rf(ctx)
|
||||
}
|
||||
if rf, ok := ret.Get(0).(func(context.Context) []v2models.Receiver); ok {
|
||||
if rf, ok := ret.Get(0).(func(context.Context) []alertingmodels.Receiver); ok {
|
||||
r0 = rf(ctx)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).([]v2models.Receiver)
|
||||
r0 = ret.Get(0).([]alertingmodels.Receiver)
|
||||
}
|
||||
}
|
||||
|
||||
@ -355,12 +358,12 @@ func (_c *AlertmanagerMock_GetReceivers_Call) Run(run func(ctx context.Context))
|
||||
return _c
|
||||
}
|
||||
|
||||
func (_c *AlertmanagerMock_GetReceivers_Call) Return(_a0 []v2models.Receiver, _a1 error) *AlertmanagerMock_GetReceivers_Call {
|
||||
func (_c *AlertmanagerMock_GetReceivers_Call) Return(_a0 []alertingmodels.Receiver, _a1 error) *AlertmanagerMock_GetReceivers_Call {
|
||||
_c.Call.Return(_a0, _a1)
|
||||
return _c
|
||||
}
|
||||
|
||||
func (_c *AlertmanagerMock_GetReceivers_Call) RunAndReturn(run func(context.Context) ([]v2models.Receiver, error)) *AlertmanagerMock_GetReceivers_Call {
|
||||
func (_c *AlertmanagerMock_GetReceivers_Call) RunAndReturn(run func(context.Context) ([]alertingmodels.Receiver, error)) *AlertmanagerMock_GetReceivers_Call {
|
||||
_c.Call.Return(run)
|
||||
return _c
|
||||
}
|
||||
@ -726,6 +729,10 @@ func (_c *AlertmanagerMock_SaveAndApplyDefaultConfig_Call) RunAndReturn(run func
|
||||
func (_m *AlertmanagerMock) SilenceState(_a0 context.Context) (notify.SilenceState, error) {
|
||||
ret := _m.Called(_a0)
|
||||
|
||||
if len(ret) == 0 {
|
||||
panic("no return value specified for SilenceState")
|
||||
}
|
||||
|
||||
var r0 notify.SilenceState
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(0).(func(context.Context) (notify.SilenceState, error)); ok {
|
||||
|
@ -7,8 +7,6 @@ import (
|
||||
|
||||
alertingNotify "github.com/grafana/alerting/notify"
|
||||
|
||||
"github.com/go-openapi/strfmt"
|
||||
"github.com/prometheus/alertmanager/api/v2/models"
|
||||
"github.com/prometheus/alertmanager/types"
|
||||
|
||||
apimodels "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions"
|
||||
@ -92,36 +90,5 @@ func (am *alertmanager) TestReceivers(ctx context.Context, c apimodels.TestRecei
|
||||
}
|
||||
|
||||
func (am *alertmanager) GetReceivers(_ context.Context) ([]apimodels.Receiver, error) {
|
||||
apiReceivers := make([]apimodels.Receiver, 0, len(am.Base.GetReceivers()))
|
||||
for _, rcv := range am.Base.GetReceivers() {
|
||||
// Build integrations slice for each receiver.
|
||||
integrations := make([]*models.Integration, 0, len(rcv.Integrations()))
|
||||
for _, integration := range rcv.Integrations() {
|
||||
name := integration.Name()
|
||||
sendResolved := integration.SendResolved()
|
||||
ts, d, err := integration.GetReport()
|
||||
integrations = append(integrations, &apimodels.Integration{
|
||||
Name: &name,
|
||||
SendResolved: &sendResolved,
|
||||
LastNotifyAttempt: strfmt.DateTime(ts),
|
||||
LastNotifyAttemptDuration: d.String(),
|
||||
LastNotifyAttemptError: func() string {
|
||||
if err != nil {
|
||||
return err.Error()
|
||||
}
|
||||
return ""
|
||||
}(),
|
||||
})
|
||||
}
|
||||
|
||||
active := rcv.Active()
|
||||
name := rcv.Name()
|
||||
apiReceivers = append(apiReceivers, apimodels.Receiver{
|
||||
Active: &active,
|
||||
Integrations: integrations,
|
||||
Name: &name,
|
||||
})
|
||||
}
|
||||
|
||||
return apiReceivers, nil
|
||||
return am.Base.GetReceivers(), nil
|
||||
}
|
||||
|
@ -494,10 +494,10 @@ func (am *Alertmanager) GetReceivers(ctx context.Context) ([]apimodels.Receiver,
|
||||
|
||||
var rcvs []apimodels.Receiver
|
||||
for _, rcv := range res.Payload {
|
||||
if rcv.Integrations == nil {
|
||||
rcv.Integrations = []*apimodels.Integration{}
|
||||
}
|
||||
rcvs = append(rcvs, *rcv)
|
||||
rcvs = append(rcvs, apimodels.Receiver{
|
||||
Name: *rcv.Name,
|
||||
Integrations: []apimodels.Integration{},
|
||||
})
|
||||
}
|
||||
return rcvs, nil
|
||||
}
|
||||
|
@ -715,7 +715,7 @@ func TestIntegrationRemoteAlertmanagerReceivers(t *testing.T) {
|
||||
// We should start with the default config.
|
||||
rcvs, err := am.GetReceivers(context.Background())
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, "empty-receiver", *rcvs[0].Name)
|
||||
require.Equal(t, "empty-receiver", rcvs[0].Name)
|
||||
}
|
||||
|
||||
func genAlert(active bool, labels map[string]string) amv2.PostableAlert {
|
||||
|
@ -1,11 +1,14 @@
|
||||
// Code generated by mockery v2.42.1. DO NOT EDIT.
|
||||
// Code generated by mockery v2.43.2. DO NOT EDIT.
|
||||
|
||||
package alertmanager_mock
|
||||
|
||||
import (
|
||||
context "context"
|
||||
|
||||
alertingmodels "github.com/grafana/alerting/models"
|
||||
|
||||
definitions "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions"
|
||||
|
||||
mock "github.com/stretchr/testify/mock"
|
||||
|
||||
models "github.com/grafana/grafana/pkg/services/ngalert/models"
|
||||
@ -401,23 +404,23 @@ func (_c *RemoteAlertmanagerMock_GetAlerts_Call) RunAndReturn(run func(context.C
|
||||
}
|
||||
|
||||
// GetReceivers provides a mock function with given fields: ctx
|
||||
func (_m *RemoteAlertmanagerMock) GetReceivers(ctx context.Context) ([]v2models.Receiver, error) {
|
||||
func (_m *RemoteAlertmanagerMock) GetReceivers(ctx context.Context) ([]alertingmodels.Receiver, error) {
|
||||
ret := _m.Called(ctx)
|
||||
|
||||
if len(ret) == 0 {
|
||||
panic("no return value specified for GetReceivers")
|
||||
}
|
||||
|
||||
var r0 []v2models.Receiver
|
||||
var r0 []alertingmodels.Receiver
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(0).(func(context.Context) ([]v2models.Receiver, error)); ok {
|
||||
if rf, ok := ret.Get(0).(func(context.Context) ([]alertingmodels.Receiver, error)); ok {
|
||||
return rf(ctx)
|
||||
}
|
||||
if rf, ok := ret.Get(0).(func(context.Context) []v2models.Receiver); ok {
|
||||
if rf, ok := ret.Get(0).(func(context.Context) []alertingmodels.Receiver); ok {
|
||||
r0 = rf(ctx)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).([]v2models.Receiver)
|
||||
r0 = ret.Get(0).([]alertingmodels.Receiver)
|
||||
}
|
||||
}
|
||||
|
||||
@ -448,12 +451,12 @@ func (_c *RemoteAlertmanagerMock_GetReceivers_Call) Run(run func(ctx context.Con
|
||||
return _c
|
||||
}
|
||||
|
||||
func (_c *RemoteAlertmanagerMock_GetReceivers_Call) Return(_a0 []v2models.Receiver, _a1 error) *RemoteAlertmanagerMock_GetReceivers_Call {
|
||||
func (_c *RemoteAlertmanagerMock_GetReceivers_Call) Return(_a0 []alertingmodels.Receiver, _a1 error) *RemoteAlertmanagerMock_GetReceivers_Call {
|
||||
_c.Call.Return(_a0, _a1)
|
||||
return _c
|
||||
}
|
||||
|
||||
func (_c *RemoteAlertmanagerMock_GetReceivers_Call) RunAndReturn(run func(context.Context) ([]v2models.Receiver, error)) *RemoteAlertmanagerMock_GetReceivers_Call {
|
||||
func (_c *RemoteAlertmanagerMock_GetReceivers_Call) RunAndReturn(run func(context.Context) ([]alertingmodels.Receiver, error)) *RemoteAlertmanagerMock_GetReceivers_Call {
|
||||
_c.Call.Return(run)
|
||||
return _c
|
||||
}
|
||||
@ -819,6 +822,10 @@ func (_c *RemoteAlertmanagerMock_SaveAndApplyDefaultConfig_Call) RunAndReturn(ru
|
||||
func (_m *RemoteAlertmanagerMock) SilenceState(_a0 context.Context) (notify.SilenceState, error) {
|
||||
ret := _m.Called(_a0)
|
||||
|
||||
if len(ret) == 0 {
|
||||
panic("no return value specified for SilenceState")
|
||||
}
|
||||
|
||||
var r0 notify.SilenceState
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(0).(func(context.Context) (notify.SilenceState, error)); ok {
|
||||
|
@ -1031,33 +1031,29 @@ func TestIntegrationNotificationChannels(t *testing.T) {
|
||||
err := json.Unmarshal([]byte(b), &receivers)
|
||||
require.NoError(t, err)
|
||||
for _, rcv := range receivers {
|
||||
t.Run("Receiver "+*rcv.Name, func(t *testing.T) {
|
||||
t.Run("Receiver "+rcv.Name, func(t *testing.T) {
|
||||
var expActive bool
|
||||
if _, ok := expInactiveReceivers[*rcv.Name]; !ok {
|
||||
if _, ok := expInactiveReceivers[rcv.Name]; !ok {
|
||||
expActive = true
|
||||
}
|
||||
var expErr bool
|
||||
if _, ok := expNotificationErrors[*rcv.Name]; ok {
|
||||
if _, ok := expNotificationErrors[rcv.Name]; ok {
|
||||
expErr = true
|
||||
}
|
||||
|
||||
require.NotNil(t, rcv.Name)
|
||||
require.NotNil(t, rcv.Active)
|
||||
require.NotEmpty(t, rcv.Integrations)
|
||||
if expActive {
|
||||
require.True(t, *rcv.Active)
|
||||
require.True(t, rcv.Active)
|
||||
}
|
||||
|
||||
// We don't have test alerts for the default notifier, continue iterating.
|
||||
if *rcv.Name == "grafana-default-email" {
|
||||
if rcv.Name == "grafana-default-email" {
|
||||
return
|
||||
}
|
||||
|
||||
for _, integration := range rcv.Integrations {
|
||||
require.NotNil(t, integration.Name)
|
||||
t.Run("Integration "+*integration.Name, func(t *testing.T) {
|
||||
require.NotNil(t, integration.SendResolved)
|
||||
|
||||
t.Run("Integration "+integration.Name, func(t *testing.T) {
|
||||
// If the receiver is not active, no attempts to send notifications should be registered.
|
||||
if expActive {
|
||||
// Prometheus' durations get rounded down, so we might end up with "0s" if we have values smaller than 1ms.
|
||||
@ -1070,7 +1066,7 @@ func TestIntegrationNotificationChannels(t *testing.T) {
|
||||
// Check whether we're expecting an error on this integration.
|
||||
if expErr {
|
||||
for _, integration := range rcv.Integrations {
|
||||
require.Equal(t, expNotificationErrors[*rcv.Name], integration.LastNotifyAttemptError)
|
||||
require.Equal(t, expNotificationErrors[rcv.Name], integration.LastNotifyAttemptError)
|
||||
}
|
||||
} else {
|
||||
require.Equal(t, "", integration.LastNotifyAttemptError)
|
||||
|
Loading…
Reference in New Issue
Block a user