diff --git a/pkg/models/alert.go b/pkg/models/alert.go index 61976677764..fa3f4b466a8 100644 --- a/pkg/models/alert.go +++ b/pkg/models/alert.go @@ -35,6 +35,7 @@ const ( var ( ErrCannotChangeStateOnPausedAlert error = fmt.Errorf("Cannot change state on pause alert") + ErrRequiresNewState error = fmt.Errorf("update alert state requires a new state.") ) func (s AlertStateType) IsValid() bool { diff --git a/pkg/services/alerting/result_handler.go b/pkg/services/alerting/result_handler.go index 80e6ba5bf51..1298a5dda36 100644 --- a/pkg/services/alerting/result_handler.go +++ b/pkg/services/alerting/result_handler.go @@ -61,6 +61,12 @@ func (handler *DefaultResultHandler) Handle(evalContext *EvalContext) error { handler.log.Error("Cannot change state on alert thats pause", "error", err) return err } + + if err == m.ErrRequiresNewState { + handler.log.Info("Alert already updated") + return nil + } + handler.log.Error("Failed to save state", "error", err) } diff --git a/pkg/services/sqlstore/alert.go b/pkg/services/sqlstore/alert.go index 66f3b5b7250..4bf4cb5d0e9 100644 --- a/pkg/services/sqlstore/alert.go +++ b/pkg/services/sqlstore/alert.go @@ -240,6 +240,10 @@ func SetAlertState(cmd *m.SetAlertStateCommand) error { return m.ErrCannotChangeStateOnPausedAlert } + if alert.State == cmd.State { + return m.ErrRequiresNewState + } + alert.State = cmd.State alert.StateChanges += 1 alert.NewStateDate = time.Now()