diff --git a/pkg/services/alerting/engine.go b/pkg/services/alerting/engine.go index 862e6993e44..67910830776 100644 --- a/pkg/services/alerting/engine.go +++ b/pkg/services/alerting/engine.go @@ -108,11 +108,10 @@ func (e *Engine) resultHandler() { result.AlertJob.Running = false - // handle result error if result.Error != nil { - result.AlertJob.RetryCount++ + result.AlertJob.IncRetry() - if result.AlertJob.RetryCount < maxRetries { + if result.AlertJob.Retryable() { e.log.Error("Alert Rule Result Error", "ruleId", result.AlertJob.Rule.Id, "error", result.Error, "retry", result.AlertJob.RetryCount) e.execQueue <- result.AlertJob } else { @@ -123,7 +122,7 @@ func (e *Engine) resultHandler() { e.saveState(result) } } else { - result.AlertJob.RetryCount = 0 + result.AlertJob.ResetRetry() e.saveState(result) } } diff --git a/pkg/services/alerting/models.go b/pkg/services/alerting/models.go index 50700887b23..a815a87d3d0 100644 --- a/pkg/services/alerting/models.go +++ b/pkg/services/alerting/models.go @@ -8,6 +8,18 @@ type AlertJob struct { Rule *AlertRule } +func (aj *AlertJob) Retryable() bool { + return aj.RetryCount < maxRetries +} + +func (aj *AlertJob) ResetRetry() { + aj.RetryCount = 0 +} + +func (aj *AlertJob) IncRetry() { + aj.RetryCount++ +} + type AlertResult struct { State string ActualValue float64 diff --git a/pkg/services/alerting/alerting_test.go b/pkg/services/alerting/reader_test.go similarity index 100% rename from pkg/services/alerting/alerting_test.go rename to pkg/services/alerting/reader_test.go diff --git a/pkg/services/sqlstore/alert_state.go b/pkg/services/sqlstore/alert_state.go index c8aba5ab7c9..0b8d610e20f 100644 --- a/pkg/services/sqlstore/alert_state.go +++ b/pkg/services/sqlstore/alert_state.go @@ -31,13 +31,14 @@ func SetNewAlertState(cmd *m.UpdateAlertStateCommand) error { } if alert.State == cmd.NewState { + cmd.Result = &m.Alert{} return nil } alert.State = cmd.NewState sess.Id(alert.Id).Update(&alert) - log := m.AlertState{ + alertState := m.AlertState{ AlertId: cmd.AlertId, OrgId: cmd.AlertId, NewState: cmd.NewState, @@ -45,7 +46,7 @@ func SetNewAlertState(cmd *m.UpdateAlertStateCommand) error { Created: time.Now(), } - sess.Insert(&log) + sess.Insert(&alertState) cmd.Result = &alert return nil