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:
@@ -37,9 +37,18 @@ func (svc *MuteTimingService) GetMuteTimings(ctx context.Context, orgID int64) (
|
|||||||
return []definitions.MuteTimeInterval{}, nil
|
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))
|
result := make([]definitions.MuteTimeInterval, 0, len(rev.cfg.AlertmanagerConfig.MuteTimeIntervals))
|
||||||
for _, interval := range 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
|
return result, nil
|
||||||
}
|
}
|
||||||
@@ -60,12 +69,11 @@ func (svc *MuteTimingService) GetMuteTiming(ctx context.Context, name string, or
|
|||||||
MuteTimeInterval: mt,
|
MuteTimeInterval: mt,
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = svc.provenanceStore.GetProvenance(ctx, &result, orgID)
|
prov, err := svc.provenanceStore.GetProvenance(ctx, &result, orgID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return definitions.MuteTimeInterval{}, err
|
return definitions.MuteTimeInterval{}, err
|
||||||
}
|
}
|
||||||
// TODO uncomment in a follow up
|
result.Provenance = definitions.Provenance(prov)
|
||||||
// result.Provenance = definitions.Provenance(prov)
|
|
||||||
return result, nil
|
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) {
|
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) {
|
store.GetFn = func(ctx context.Context, orgID int64) (*cfgRevision, error) {
|
||||||
return revision, nil
|
return revision, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prov.EXPECT().GetProvenances(mock.Anything, mock.Anything, mock.Anything).Return(provenances, nil)
|
||||||
|
|
||||||
result, err := sut.GetMuteTimings(context.Background(), 1)
|
result, err := sut.GetMuteTimings(context.Background(), 1)
|
||||||
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Len(t, result, len(revision.cfg.AlertmanagerConfig.MuteTimeIntervals))
|
require.Len(t, result, len(revision.cfg.AlertmanagerConfig.MuteTimeIntervals))
|
||||||
require.Equal(t, "Test1", result[0].Name)
|
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.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.Equal(t, "Test3", result[2].Name)
|
||||||
require.EqualValues(t, "", result[2].Provenance)
|
require.EqualValues(t, "", result[2].Provenance)
|
||||||
|
|
||||||
require.Len(t, store.Calls, 1)
|
require.Len(t, store.Calls, 1)
|
||||||
require.Equal(t, "Get", store.Calls[0].Method)
|
require.Equal(t, "Get", store.Calls[0].Method)
|
||||||
require.Equal(t, orgID, store.Calls[0].Args[1])
|
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) {
|
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)
|
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.NoError(t, err)
|
||||||
|
|
||||||
require.Equal(t, "Test1", result.Name)
|
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.Len(t, store.Calls, 1)
|
||||||
require.Equal(t, "Get", store.Calls[0].Method)
|
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)
|
mt, status, body := apiClient.GetMuteTimingByNameWithStatus(t, emptyMuteTiming.Name)
|
||||||
requireStatusCode(t, http.StatusOK, status, body)
|
requireStatusCode(t, http.StatusOK, status, body)
|
||||||
require.Equal(t, emptyMuteTiming.MuteTimeInterval, mt.MuteTimeInterval)
|
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)
|
mt, status, body = apiClient.GetMuteTimingByNameWithStatus(t, anotherMuteTiming.Name)
|
||||||
requireStatusCode(t, http.StatusOK, status, body)
|
requireStatusCode(t, http.StatusOK, status, body)
|
||||||
require.Equal(t, anotherMuteTiming.MuteTimeInterval, mt.MuteTimeInterval)
|
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) {
|
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.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.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) {
|
t.Run("should get BadRequest if creates a new mute timing with the same name", func(t *testing.T) {
|
||||||
|
Reference in New Issue
Block a user