mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Alerting: Fix MuteTiming Get API to return provenance status (#80494)
This commit is contained in:
parent
2fb03dfa56
commit
4b071f5452
@ -37,9 +37,18 @@ func (svc *MuteTimingService) GetMuteTimings(ctx context.Context, orgID int64) (
|
||||
return []definitions.MuteTimeInterval{}, nil
|
||||
}
|
||||
|
||||
provenances, err := svc.provenanceStore.GetProvenances(ctx, orgID, (&definitions.MuteTimeInterval{}).ResourceType())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result := make([]definitions.MuteTimeInterval, 0, len(rev.cfg.AlertmanagerConfig.MuteTimeIntervals))
|
||||
for _, interval := range rev.cfg.AlertmanagerConfig.MuteTimeIntervals {
|
||||
result = append(result, definitions.MuteTimeInterval{MuteTimeInterval: interval})
|
||||
def := definitions.MuteTimeInterval{MuteTimeInterval: interval}
|
||||
if prov, ok := provenances[def.ResourceID()]; ok {
|
||||
def.Provenance = definitions.Provenance(prov)
|
||||
}
|
||||
result = append(result, def)
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
@ -60,12 +69,11 @@ func (svc *MuteTimingService) GetMuteTiming(ctx context.Context, name string, or
|
||||
MuteTimeInterval: mt,
|
||||
}
|
||||
|
||||
_, err = svc.provenanceStore.GetProvenance(ctx, &result, orgID)
|
||||
prov, err := svc.provenanceStore.GetProvenance(ctx, &result, orgID)
|
||||
if err != nil {
|
||||
return definitions.MuteTimeInterval{}, err
|
||||
}
|
||||
// TODO uncomment in a follow up
|
||||
// result.Provenance = definitions.Provenance(prov)
|
||||
result.Provenance = definitions.Provenance(prov)
|
||||
return result, nil
|
||||
}
|
||||
|
||||
|
@ -42,26 +42,35 @@ func TestGetMuteTimings(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
provenances := map[string]models.Provenance{
|
||||
"Test1": models.ProvenanceFile,
|
||||
"Test2": models.ProvenanceAPI,
|
||||
}
|
||||
|
||||
t.Run("service returns timings from config file", func(t *testing.T) {
|
||||
sut, store, _ := createMuteTimingSvcSut()
|
||||
sut, store, prov := createMuteTimingSvcSut()
|
||||
store.GetFn = func(ctx context.Context, orgID int64) (*cfgRevision, error) {
|
||||
return revision, nil
|
||||
}
|
||||
|
||||
prov.EXPECT().GetProvenances(mock.Anything, mock.Anything, mock.Anything).Return(provenances, nil)
|
||||
|
||||
result, err := sut.GetMuteTimings(context.Background(), 1)
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Len(t, result, len(revision.cfg.AlertmanagerConfig.MuteTimeIntervals))
|
||||
require.Equal(t, "Test1", result[0].Name)
|
||||
require.EqualValues(t, "", result[0].Provenance)
|
||||
require.EqualValues(t, provenances["Test1"], result[0].Provenance)
|
||||
require.Equal(t, "Test2", result[1].Name)
|
||||
require.EqualValues(t, "", result[1].Provenance)
|
||||
require.EqualValues(t, provenances["Test2"], result[1].Provenance)
|
||||
require.Equal(t, "Test3", result[2].Name)
|
||||
require.EqualValues(t, "", result[2].Provenance)
|
||||
|
||||
require.Len(t, store.Calls, 1)
|
||||
require.Equal(t, "Get", store.Calls[0].Method)
|
||||
require.Equal(t, orgID, store.Calls[0].Args[1])
|
||||
|
||||
prov.AssertCalled(t, "GetProvenances", mock.Anything, orgID, (&definitions.MuteTimeInterval{}).ResourceType())
|
||||
})
|
||||
|
||||
t.Run("service returns empty list when config file contains no mute timings", func(t *testing.T) {
|
||||
@ -88,6 +97,19 @@ func TestGetMuteTimings(t *testing.T) {
|
||||
|
||||
require.ErrorIs(t, err, expected)
|
||||
})
|
||||
|
||||
t.Run("when unable to read provenance", func(t *testing.T) {
|
||||
sut, store, prov := createMuteTimingSvcSut()
|
||||
store.GetFn = func(ctx context.Context, orgID int64) (*cfgRevision, error) {
|
||||
return revision, nil
|
||||
}
|
||||
expected := fmt.Errorf("failed")
|
||||
prov.EXPECT().GetProvenances(mock.Anything, mock.Anything, mock.Anything).Return(nil, expected)
|
||||
|
||||
_, err := sut.GetMuteTimings(context.Background(), orgID)
|
||||
|
||||
require.ErrorIs(t, err, expected)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@ -120,7 +142,7 @@ func TestGetMuteTiming(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, "Test1", result.Name)
|
||||
require.EqualValues(t, "", result.Provenance) // TODO this is bug and that's how it works now. Fix it in follow up
|
||||
require.EqualValues(t, models.ProvenanceAPI, result.Provenance)
|
||||
|
||||
require.Len(t, store.Calls, 1)
|
||||
require.Equal(t, "Get", store.Calls[0].Method)
|
||||
|
@ -457,12 +457,12 @@ func TestMuteTimings(t *testing.T) {
|
||||
mt, status, body := apiClient.GetMuteTimingByNameWithStatus(t, emptyMuteTiming.Name)
|
||||
requireStatusCode(t, http.StatusOK, status, body)
|
||||
require.Equal(t, emptyMuteTiming.MuteTimeInterval, mt.MuteTimeInterval)
|
||||
require.EqualValues(t, "", mt.Provenance) // TODO this is a bug
|
||||
require.EqualValues(t, models.ProvenanceAPI, mt.Provenance)
|
||||
|
||||
mt, status, body = apiClient.GetMuteTimingByNameWithStatus(t, anotherMuteTiming.Name)
|
||||
requireStatusCode(t, http.StatusOK, status, body)
|
||||
require.Equal(t, anotherMuteTiming.MuteTimeInterval, mt.MuteTimeInterval)
|
||||
require.EqualValues(t, "", mt.Provenance) // TODO this is a bug
|
||||
require.EqualValues(t, models.ProvenanceAPI, mt.Provenance)
|
||||
})
|
||||
|
||||
t.Run("should return NotFound if mute timing does not exist", func(t *testing.T) {
|
||||
@ -480,10 +480,10 @@ func TestMuteTimings(t *testing.T) {
|
||||
})
|
||||
|
||||
require.Equal(t, emptyMuteTiming.MuteTimeInterval, mt[0].MuteTimeInterval)
|
||||
require.EqualValues(t, "", mt[0].Provenance) // TODO this is a bug
|
||||
require.EqualValues(t, models.ProvenanceAPI, mt[0].Provenance)
|
||||
|
||||
require.Equal(t, anotherMuteTiming.MuteTimeInterval, mt[1].MuteTimeInterval)
|
||||
require.EqualValues(t, "", mt[1].Provenance) // TODO this is a bug
|
||||
require.EqualValues(t, models.ProvenanceAPI, mt[1].Provenance)
|
||||
})
|
||||
|
||||
t.Run("should get BadRequest if creates a new mute timing with the same name", func(t *testing.T) {
|
||||
|
Loading…
Reference in New Issue
Block a user