Expire pending silence and move to expired state

Instead of setting endsAt to startsAt we can set both to now. Thereby
the Silence will get the expired state by default.
This commit is contained in:
Max Leonard Inden 2017-05-29 18:03:31 +02:00
parent 0819ee8a87
commit 08be6a4149
No known key found for this signature in database
GPG Key ID: 5403C5464810BC26
2 changed files with 10 additions and 3 deletions

View File

@ -455,7 +455,9 @@ func (s *Silences) expire(id string) error {
case StateActive:
sil.EndsAt = now
case StatePending:
sil.EndsAt = sil.StartsAt
// Set both to now to make Silence move to "expired" state
sil.StartsAt = now
sil.EndsAt = now
}
return s.setSilence(sil)

View File

@ -23,6 +23,7 @@ import (
"time"
pb "github.com/prometheus/alertmanager/silence/silencepb"
"github.com/prometheus/alertmanager/types"
"github.com/prometheus/common/model"
"github.com/stretchr/testify/require"
"github.com/weaveworks/mesh"
@ -752,10 +753,14 @@ func TestSilenceExpire(t *testing.T) {
require.Equal(t, &pb.Silence{
Id: "pending",
Matchers: []*pb.Matcher{m},
StartsAt: now.Add(time.Minute),
EndsAt: now.Add(time.Minute),
StartsAt: now,
EndsAt: now,
UpdatedAt: now,
}, sil)
// Expiring a pending Silence should make the API return the
// SilenceStateExpired Silence state.
silenceState := types.CalcSilenceState(sil.StartsAt, sil.EndsAt)
require.Equal(t, silenceState, types.SilenceStateExpired)
sil, err = s.QueryOne(QIDs("active"))
require.NoError(t, err)