feat(api): adds endpoint for mass pausing alerts

ref #6589
This commit is contained in:
bergquist
2016-12-15 17:01:45 +01:00
parent 830bf5a91c
commit fb6aa0e026
9 changed files with 117 additions and 39 deletions

View File

@@ -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,10 +278,73 @@ func PauseAlert(c *middleware.Context, dto dtos.PauseAlertCommand) Response {
}
result := map[string]interface{}{
"alertId": cmd.AlertId,
"alertId": alertId,
"state": response,
"message": "alert " + pausedState,
}
return Json(200, result)
}
func existInSlice(slice []int64, value int64) bool {
for _, v := range slice {
if v == value {
return true
}
}
return false
}
//POST /api/alerts/pause
func PauseAlerts(c *middleware.Context, dto dtos.PauseAlertsCommand) Response {
cmd := &models.GetAllAlertsQuery{}
if err := bus.Dispatch(cmd); err != nil {
return ApiError(500, "", err)
}
var alertsToUpdate []int64
skipFilter := len(dto.DataSourceIds) == 0
for _, alert := range cmd.Result {
if skipFilter {
alertsToUpdate = append(alertsToUpdate, alert.Id)
continue
}
alert, err := alerting.NewRuleFromDBAlert(alert)
if err != nil {
return ApiError(500, "", err)
}
for _, v := range alert.Conditions {
id, exist := v.GetDatsourceId()
if exist && existInSlice(dto.DataSourceIds, *id) {
alertsToUpdate = append(alertsToUpdate, alert.Id)
}
}
}
updateCmd := models.PauseAlertCommand{
OrgId: c.OrgId,
AlertIds: alertsToUpdate,
Paused: dto.Paused,
}
if err := bus.Dispatch(&updateCmd); err != nil {
return ApiError(500, "", err)
}
var response models.AlertStateType = models.AlertStatePending
pausedState := "un paused"
if updateCmd.Paused {
response = models.AlertStatePaused
pausedState = "paused"
}
result := map[string]interface{}{
"state": response,
"message": "alert " + pausedState,
"alertsAffected": updateCmd.ResultCount,
}
return Json(200, result)
}