// GET /api/alerts func GetAlerts(c *middleware.Context) Response { query := models.GetAlertsQuery{ OrgId: c.OrgId, DashboardId: c.QueryInt64("dashboardId"), PanelId: c.QueryInt64("panelId"), Limit: c.QueryInt64("limit"), } states := c.QueryStrings("state") if len(states) > 0 { query.State = states } if err := bus.Dispatch(&query); err != nil { return ApiError(500, "List alerts failed", err) } dashboardIds := make([]int64, 0) alertDTOs := make([]*dtos.AlertRule, 0) for _, alert := range query.Result { dashboardIds = append(dashboardIds, alert.DashboardId) alertDTOs = append(alertDTOs, &dtos.AlertRule{ Id: alert.Id, DashboardId: alert.DashboardId, PanelId: alert.PanelId, Name: alert.Name, Message: alert.Message, State: alert.State, EvalDate: alert.EvalDate, NewStateDate: alert.NewStateDate, ExecutionError: alert.ExecutionError, }) } dashboardsQuery := models.GetDashboardsQuery{ DashboardIds: dashboardIds, } if len(alertDTOs) > 0 { if err := bus.Dispatch(&dashboardsQuery); err != nil { return ApiError(500, "List alerts failed", err) } } //TODO: should be possible to speed this up with lookup table for _, alert := range alertDTOs { for _, dash := range dashboardsQuery.Result { if alert.DashboardId == dash.Id { alert.DashbboardUri = "db/" + dash.Slug } } } return Json(200, alertDTOs) }