mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Alerting: Implement CreateSilence in the forked Alertmanager (remote primary mode) (#85716)
This commit is contained in:
parent
49fbe970fb
commit
36a0499128
@ -435,19 +435,31 @@ func TestForkedAlertmanager_ModeRemotePrimary(t *testing.T) {
|
||||
})
|
||||
|
||||
t.Run("CreateSilence", func(tt *testing.T) {
|
||||
// We should create the silence in the remote Alertmanager.
|
||||
_, remote, forked := genTestAlertmanagers(tt, modeRemotePrimary)
|
||||
|
||||
// We should create the silence in both Alertmanagers using the same uid.
|
||||
testSilence := &apimodels.PostableSilence{}
|
||||
expID := "test-id"
|
||||
remote.EXPECT().CreateSilence(mock.Anything, mock.Anything).Return(expID, nil).Once()
|
||||
id, err := forked.CreateSilence(ctx, nil)
|
||||
|
||||
internal, remote, forked := genTestAlertmanagers(tt, modeRemotePrimary)
|
||||
remote.EXPECT().CreateSilence(mock.Anything, testSilence).Return(expID, nil).Once()
|
||||
internal.EXPECT().CreateSilence(mock.Anything, testSilence).Return(testSilence.ID, nil).Once()
|
||||
id, err := forked.CreateSilence(ctx, testSilence)
|
||||
require.NoError(tt, err)
|
||||
require.Equal(tt, expID, testSilence.ID)
|
||||
require.Equal(tt, expID, id)
|
||||
|
||||
// If there's an error in the remote Alertmanager, the error should be returned.
|
||||
remote.EXPECT().CreateSilence(mock.Anything, mock.Anything).Return("", expErr).Maybe()
|
||||
_, err = forked.CreateSilence(ctx, nil)
|
||||
_, remote, forked = genTestAlertmanagers(tt, modeRemotePrimary)
|
||||
remote.EXPECT().CreateSilence(mock.Anything, mock.Anything).Return("", expErr).Once()
|
||||
_, err = forked.CreateSilence(ctx, testSilence)
|
||||
require.ErrorIs(tt, expErr, err)
|
||||
|
||||
// An error in the internal Alertmanager should not be returned.
|
||||
internal, remote, forked = genTestAlertmanagers(tt, modeRemotePrimary)
|
||||
remote.EXPECT().CreateSilence(mock.Anything, mock.Anything).Return(expID, nil).Once()
|
||||
internal.EXPECT().CreateSilence(mock.Anything, mock.Anything).Return("", expErr).Once()
|
||||
id, err = forked.CreateSilence(ctx, testSilence)
|
||||
require.NoError(tt, err)
|
||||
require.Equal(tt, expID, id)
|
||||
})
|
||||
|
||||
t.Run("DeleteSilence", func(tt *testing.T) {
|
||||
|
@ -72,7 +72,16 @@ func (fam *RemotePrimaryForkedAlertmanager) GetStatus() apimodels.GettableStatus
|
||||
}
|
||||
|
||||
func (fam *RemotePrimaryForkedAlertmanager) CreateSilence(ctx context.Context, silence *apimodels.PostableSilence) (string, error) {
|
||||
return fam.remote.CreateSilence(ctx, silence)
|
||||
uid, err := fam.remote.CreateSilence(ctx, silence)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
silence.ID = uid
|
||||
if _, err := fam.internal.CreateSilence(ctx, silence); err != nil {
|
||||
fam.log.Error("Error creating silence in the internal Alertmanager", "err", err, "silence", silence)
|
||||
}
|
||||
return uid, nil
|
||||
}
|
||||
|
||||
func (fam *RemotePrimaryForkedAlertmanager) DeleteSilence(ctx context.Context, id string) error {
|
||||
|
Loading…
Reference in New Issue
Block a user