diff --git a/pkg/api/alerting.go b/pkg/api/alerting.go index 62575deb8d7..42ea091ef10 100644 --- a/pkg/api/alerting.go +++ b/pkg/api/alerting.go @@ -63,9 +63,22 @@ func GetAlerts(c *middleware.Context) Response { return ApiError(500, "List alerts failed", err) } + alertDTOs, resp := transformToDTOs(query.Result, c) + if resp != nil { + return resp + } + + return Json(200, alertDTOs) +} + +func transformToDTOs(alerts []*models.Alert, c *middleware.Context) ([]*dtos.AlertRule, Response) { + if len(alerts) == 0 { + return []*dtos.AlertRule{}, nil + } + dashboardIds := make([]int64, 0) alertDTOs := make([]*dtos.AlertRule, 0) - for _, alert := range query.Result { + for _, alert := range alerts { dashboardIds = append(dashboardIds, alert.DashboardId) alertDTOs = append(alertDTOs, &dtos.AlertRule{ Id: alert.Id, @@ -84,10 +97,8 @@ func GetAlerts(c *middleware.Context) Response { DashboardIds: dashboardIds, } - if len(alertDTOs) > 0 { - if err := bus.Dispatch(&dashboardsQuery); err != nil { - return ApiError(500, "List alerts failed", err) - } + if err := bus.Dispatch(&dashboardsQuery); err != nil { + return nil, ApiError(500, "List alerts failed", err) } //TODO: should be possible to speed this up with lookup table @@ -106,10 +117,8 @@ func GetAlerts(c *middleware.Context) Response { OrgRole: c.SignedInUser.OrgRole, } - if len(alertDTOs) > 0 { - if err := bus.Dispatch(&permissionsQuery); err != nil { - return ApiError(500, "List alerts failed", err) - } + if err := bus.Dispatch(&permissionsQuery); err != nil { + return nil, ApiError(500, "List alerts failed", err) } for _, alert := range alertDTOs { @@ -120,7 +129,7 @@ func GetAlerts(c *middleware.Context) Response { } } - return Json(200, alertDTOs) + return alertDTOs, nil } // POST /api/alerts/test