func Search(c *middleware.Context) { query := c.Query("query") tags := c.QueryStrings("tag") starred := c.Query("starred") limit := c.QueryInt("limit") if limit == 0 { limit = 1000 } searchQuery := search.Query{ Title: query, Tags: tags, UserId: c.UserId, Limit: limit, IsStarred: starred == "true", OrgId: c.OrgId, } err := bus.Dispatch(&searchQuery) if err != nil { c.JsonApiErr(500, "Search failed", err) return } c.JSON(200, searchQuery.Result) }
// 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 GetAnnotations(c *middleware.Context) Response { query := &annotations.ItemQuery{ From: c.QueryInt64("from") / 1000, To: c.QueryInt64("to") / 1000, Type: annotations.ItemType(c.Query("type")), OrgId: c.OrgId, AlertId: c.QueryInt64("alertId"), DashboardId: c.QueryInt64("dashboardId"), PanelId: c.QueryInt64("panelId"), Limit: c.QueryInt64("limit"), NewState: c.QueryStrings("newState"), } repo := annotations.GetRepository() items, err := repo.Find(query) if err != nil { return ApiError(500, "Failed to get annotations", err) } result := make([]dtos.Annotation, 0) for _, item := range items { result = append(result, dtos.Annotation{ AlertId: item.AlertId, Time: item.Epoch * 1000, Data: item.Data, NewState: item.NewState, PrevState: item.PrevState, Text: item.Text, Metric: item.Metric, Title: item.Title, }) } return Json(200, result) }
func Search(c *middleware.Context) { query := c.Query("query") tags := c.QueryStrings("tag") starred := c.Query("starred") limit := c.QueryInt("limit") if limit == 0 { limit = 1000 } dbids := make([]int, 0) for _, id := range c.QueryStrings("dashboardIds") { dashboardId, err := strconv.Atoi(id) if err == nil { dbids = append(dbids, dashboardId) } } searchQuery := search.Query{ Title: query, Tags: tags, UserId: c.UserId, Limit: limit, IsStarred: starred == "true", OrgId: c.OrgId, DashboardIds: dbids, } err := bus.Dispatch(&searchQuery) if err != nil { c.JsonApiErr(500, "Search failed", err) return } c.TimeRequest(metrics.M_Api_Dashboard_Search) c.JSON(200, searchQuery.Result) }