diff --git a/pkg/services/ngalert/state/manager_test.go b/pkg/services/ngalert/state/manager_test.go index 075f3b3a822..8ee29ab0efd 100644 --- a/pkg/services/ngalert/state/manager_test.go +++ b/pkg/services/ngalert/state/manager_test.go @@ -1868,7 +1868,7 @@ func TestProcessEvalResults(t *testing.T) { Values: make(map[string]*float64), }, }, - StartsAt: evaluationTime.Add(20 * time.Second), + StartsAt: evaluationTime.Add(30 * time.Second), EndsAt: evaluationTime.Add(50 * time.Second).Add(state.ResendDelay * 3), LastEvaluationTime: evaluationTime.Add(50 * time.Second), EvaluationDuration: evaluationDuration, diff --git a/pkg/services/ngalert/state/state.go b/pkg/services/ngalert/state/state.go index d0892db5d74..65ba71c72e2 100644 --- a/pkg/services/ngalert/state/state.go +++ b/pkg/services/ngalert/state/state.go @@ -198,6 +198,11 @@ func (a *State) resultError(alertRule *models.AlertRule, result eval.Result) { // is unavailable or queries against the datasource returns errors, and is // then resolved as soon as the datasource is available and queries return // without error + if a.State != execErrState { + // Set the start time if the state changes from Alerting to Error or from + // Error to Alerting + a.StartsAt = result.EvaluatedAt + } a.State = execErrState a.setEndsAt(alertRule, result) case eval.Pending: