diff --git a/pkg/api/alerting.go b/pkg/api/alerting.go index 0ec98018635..245931eb7af 100644 --- a/pkg/api/alerting.go +++ b/pkg/api/alerting.go @@ -259,10 +259,11 @@ func NotificationTest(c *middleware.Context, dto dtos.NotificationTestCommand) R //POST /api/alerts/:alertId/pause func PauseAlert(c *middleware.Context, dto dtos.PauseAlertCommand) Response { + alertId := c.ParamsInt64("alertId") cmd := models.PauseAlertCommand{ - OrgId: c.OrgId, - AlertId: c.ParamsInt64("alertId"), - Paused: dto.Paused, + OrgId: c.OrgId, + AlertIds: []int64{alertId}, + Paused: dto.Paused, } if err := bus.Dispatch(&cmd); err != nil { @@ -277,7 +278,7 @@ func PauseAlert(c *middleware.Context, dto dtos.PauseAlertCommand) Response { } result := map[string]interface{}{ - "alertId": c.ParamsInt64("alertId"), + "alertId": alertId, "state": response, "message": "alert " + pausedState, } diff --git a/pkg/models/alert.go b/pkg/models/alert.go index 176c146d51d..13cae0715f7 100644 --- a/pkg/models/alert.go +++ b/pkg/models/alert.go @@ -138,9 +138,10 @@ type SaveAlertsCommand struct { } type PauseAlertCommand struct { - OrgId int64 - AlertId int64 - Paused bool + OrgId int64 + AlertIds []int64 + ResultCount int64 + Paused bool } type PauseAllAlertCommand struct { diff --git a/pkg/services/sqlstore/alert.go b/pkg/services/sqlstore/alert.go index 7e3ea7de21b..8718b03e786 100644 --- a/pkg/services/sqlstore/alert.go +++ b/pkg/services/sqlstore/alert.go @@ -3,6 +3,7 @@ package sqlstore import ( "bytes" "fmt" + "strings" "time" "github.com/go-xorm/xorm" @@ -251,18 +252,31 @@ func SetAlertState(cmd *m.SetAlertStateCommand) error { func PauseAlert(cmd *m.PauseAlertCommand) error { return inTransaction(func(sess *xorm.Session) error { + if len(cmd.AlertIds) == 0 { + return fmt.Errorf("command contains no alertids") + } + + var buffer bytes.Buffer params := make([]interface{}, 0) - sql := `UPDATE alert SET state = ? WHERE id = ?` + buffer.WriteString(`UPDATE alert SET state = ?`) if cmd.Paused { params = append(params, string(m.AlertStatePaused)) } else { params = append(params, string(m.AlertStatePending)) } - params = append(params, cmd.AlertId) - _, err := sess.Exec(sql, params...) - return err + buffer.WriteString(` WHERE id IN (?` + strings.Repeat(",?", len(cmd.AlertIds)-1) + `)`) + for _, v := range cmd.AlertIds { + params = append(params, v) + } + + res, err := sess.Exec(buffer.String(), params...) + if err != nil { + return err + } + cmd.ResultCount, _ = res.RowsAffected() + return nil }) }