restores for state at seconds(now-forDuration) (#4479)

* restores for state at seconds(now-forDuration)

* bump ci
pull/4482/head
Owen Diehl 4 years ago committed by GitHub
parent 4b59556342
commit 3fb8f3d3c6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      pkg/ruler/memstore.go
  2. 10
      pkg/ruler/memstore_test.go

@ -248,7 +248,8 @@ func (m *memStoreQuerier) Select(sortSeries bool, params *storage.SelectHints, m
// see if alert condition had any inhabitants at ts-forDuration. We can assume it's still firing because // see if alert condition had any inhabitants at ts-forDuration. We can assume it's still firing because
// that's the only condition under which this is queried (via RestoreForState). // that's the only condition under which this is queried (via RestoreForState).
vec, err := m.queryFunc(m.ctx, rule.Query().String(), m.ts.Add(-rule.HoldDuration())) checkTime := m.ts.Add(-rule.HoldDuration())
vec, err := m.queryFunc(m.ctx, rule.Query().String(), checkTime)
if err != nil { if err != nil {
level.Info(m.logger).Log("msg", "error querying for rule", "rule", ruleKey, "err", err.Error()) level.Info(m.logger).Log("msg", "error querying for rule", "rule", ruleKey, "err", err.Error())
m.metrics.evaluations.WithLabelValues(statusFailure, m.userID).Inc() m.metrics.evaluations.WithLabelValues(statusFailure, m.userID).Inc()
@ -268,7 +269,7 @@ func (m *memStoreQuerier) Select(sortSeries bool, params *storage.SelectHints, m
Metric: ForStateMetric(smpl.Metric, rule.Name()), Metric: ForStateMetric(smpl.Metric, rule.Name()),
Point: promql.Point{ Point: promql.Point{
T: ts, T: ts,
V: float64(ts), V: float64(checkTime.Unix()),
}, },
}) })

@ -38,11 +38,12 @@ func testStore(queryFunc rules.QueryFunc) *MemStore {
} }
func TestSelectRestores(t *testing.T) { func TestSelectRestores(t *testing.T) {
forDuration := time.Minute
ars := []*rules.AlertingRule{ ars := []*rules.AlertingRule{
rules.NewAlertingRule( rules.NewAlertingRule(
ruleName, ruleName,
&parser.StringLiteral{Val: "unused"}, &parser.StringLiteral{Val: "unused"},
time.Minute, forDuration,
labels.FromMap(map[string]string{"foo": "bar"}), labels.FromMap(map[string]string{"foo": "bar"}),
nil, nil,
nil, nil,
@ -84,7 +85,8 @@ func TestSelectRestores(t *testing.T) {
store := testStore(fn) store := testStore(fn)
store.Start(MockRuleIter(ars)) store.Start(MockRuleIter(ars))
now := util.TimeToMillis(time.Now()) tNow := time.Now()
now := util.TimeToMillis(tNow)
q, err := store.Querier(context.Background(), 0, now) q, err := store.Querier(context.Background(), 0, now)
require.Nil(t, err) require.Nil(t, err)
@ -103,7 +105,7 @@ func TestSelectRestores(t *testing.T) {
require.Equal(t, true, iter.Next()) require.Equal(t, true, iter.Next())
ts, v := iter.At() ts, v := iter.At()
require.Equal(t, now, ts) require.Equal(t, now, ts)
require.Equal(t, float64(now), v) require.Equal(t, float64(tNow.Add(-forDuration).Unix()), v)
require.Equal(t, false, iter.Next()) require.Equal(t, false, iter.Next())
require.Equal(t, false, sset.Next()) require.Equal(t, false, sset.Next())
@ -120,7 +122,7 @@ func TestSelectRestores(t *testing.T) {
require.Equal(t, true, iter.Next()) require.Equal(t, true, iter.Next())
ts, v = iter.At() ts, v = iter.At()
require.Equal(t, now, ts) require.Equal(t, now, ts)
require.Equal(t, float64(now), v) require.Equal(t, float64(tNow.Add(-forDuration).Unix()), v)
require.Equal(t, false, iter.Next()) require.Equal(t, false, iter.Next())
require.Equal(t, false, sset.Next()) require.Equal(t, false, sset.Next())
require.Equal(t, 1, callCount) require.Equal(t, 1, callCount)

Loading…
Cancel
Save