diff --git a/pkg/api/alerting.go b/pkg/api/alerting.go index ad87fb2abd2..77804ca953c 100644 --- a/pkg/api/alerting.go +++ b/pkg/api/alerting.go @@ -354,9 +354,10 @@ func NotificationTest(c *models.ReqContext, dto dtos.NotificationTestCommand) Re //POST /api/alerts/:alertId/pause func PauseAlert(c *models.ReqContext, dto dtos.PauseAlertCommand) Response { alertID := c.ParamsInt64("alertId") + result := make(map[string]interface{}) + result["alertId"] = alertID query := models.GetAlertByIdQuery{Id: alertID} - if err := bus.Dispatch(&query); err != nil { return Error(500, "Get Alert failed", err) } @@ -370,6 +371,17 @@ func PauseAlert(c *models.ReqContext, dto dtos.PauseAlertCommand) Response { return Error(403, "Access denied to this dashboard and alert", nil) } + // Alert state validation + if query.Result.State != models.AlertStatePaused && !dto.Paused { + result["state"] = "un-paused" + result["message"] = "Alert is already un-paused" + return JSON(200, result) + } else if query.Result.State == models.AlertStatePaused && dto.Paused { + result["state"] = models.AlertStatePaused + result["message"] = "Alert is already paused" + return JSON(200, result) + } + cmd := models.PauseAlertCommand{ OrgId: c.OrgId, AlertIds: []int64{alertID}, @@ -387,12 +399,8 @@ func PauseAlert(c *models.ReqContext, dto dtos.PauseAlertCommand) Response { pausedState = "paused" } - result := map[string]interface{}{ - "alertId": alertID, - "state": response, - "message": "Alert " + pausedState, - } - + result["state"] = response + result["message"] = "Alert " + pausedState return JSON(200, result) }