Skip to content

Commit

Permalink
make getAll return provenance status
Browse files Browse the repository at this point in the history
  • Loading branch information
yuri-tceretian committed Dec 21, 2023
1 parent 717dbf9 commit 48fec7a
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 9 deletions.
16 changes: 14 additions & 2 deletions pkg/services/ngalert/provisioning/mute_timings.go
Expand Up @@ -2,7 +2,6 @@ package provisioning

import (
"context"
"fmt"

"github.com/prometheus/alertmanager/config"

Expand Down Expand Up @@ -36,9 +35,22 @@ func (svc *MuteTimingService) GetMuteTimings(ctx context.Context, orgID int64) (
return []definitions.MuteTimeInterval{}, nil
}

provenances, err := svc.prov.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
}

// GetMuteTiming returns a mute timing by name
func (svc *MuteTimingService) GetMuteTiming(ctx context.Context, name string, orgID int64) (definitions.MuteTimeInterval, error) {
rev, err := svc.config.Get(ctx, orgID)
Expand Down
28 changes: 25 additions & 3 deletions pkg/services/ngalert/provisioning/mute_timings_test.go
Expand Up @@ -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) {
Expand All @@ -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)
})
})
}

Expand Down
8 changes: 4 additions & 4 deletions pkg/tests/api/alerting/api_provisioning_test.go
Expand Up @@ -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) {
Expand All @@ -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) {
Expand Down

0 comments on commit 48fec7a

Please sign in to comment.