// 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) }
func HandleAlertsQuery(query *m.GetAlertsQuery) error { var sql bytes.Buffer params := make([]interface{}, 0) sql.WriteString(`SELECT * from alert `) sql.WriteString(`WHERE org_id = ?`) params = append(params, query.OrgId) if query.DashboardId != 0 { sql.WriteString(` AND dashboard_id = ?`) params = append(params, query.DashboardId) } if query.PanelId != 0 { sql.WriteString(` AND panel_id = ?`) params = append(params, query.PanelId) } if len(query.State) > 0 && query.State[0] != "ALL" { sql.WriteString(` AND (`) for i, v := range query.State { if i > 0 { sql.WriteString(" OR ") } sql.WriteString("state = ? ") params = append(params, v) } sql.WriteString(")") } if query.Limit != 0 { sql.WriteString(" LIMIT ?") params = append(params, query.Limit) } sql.WriteString(" ORDER BY name ASC") alerts := make([]*m.Alert, 0) if err := x.Sql(sql.String(), params...).Find(&alerts); err != nil { return err } for i, _ := range alerts { if alerts[i].ExecutionError == " " { alerts[i].ExecutionError = "" } } query.Result = alerts return nil }
func GetAlerts(query *m.GetAlertsQuery) error { sess := x.Limit(100, 0).Where("org_id=?", query.OrgId).Asc("id") query.Result = make([]*m.Alert, 0) return sess.Find(&query.Result) }