search.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package api
  2. import (
  3. "strconv"
  4. "github.com/grafana/grafana/pkg/bus"
  5. "github.com/grafana/grafana/pkg/metrics"
  6. m "github.com/grafana/grafana/pkg/models"
  7. "github.com/grafana/grafana/pkg/services/search"
  8. )
  9. func Search(c *m.ReqContext) {
  10. query := c.Query("query")
  11. tags := c.QueryStrings("tag")
  12. starred := c.Query("starred")
  13. limit := c.QueryInt("limit")
  14. dashboardType := c.Query("type")
  15. permission := m.PERMISSION_VIEW
  16. if limit == 0 {
  17. limit = 1000
  18. }
  19. if c.Query("permission") == "Edit" {
  20. permission = m.PERMISSION_EDIT
  21. }
  22. dbIDs := make([]int64, 0)
  23. for _, id := range c.QueryStrings("dashboardIds") {
  24. dashboardID, err := strconv.ParseInt(id, 10, 64)
  25. if err == nil {
  26. dbIDs = append(dbIDs, dashboardID)
  27. }
  28. }
  29. folderIDs := make([]int64, 0)
  30. for _, id := range c.QueryStrings("folderIds") {
  31. folderID, err := strconv.ParseInt(id, 10, 64)
  32. if err == nil {
  33. folderIDs = append(folderIDs, folderID)
  34. }
  35. }
  36. searchQuery := search.Query{
  37. Title: query,
  38. Tags: tags,
  39. SignedInUser: c.SignedInUser,
  40. Limit: limit,
  41. IsStarred: starred == "true",
  42. OrgId: c.OrgId,
  43. DashboardIds: dbIDs,
  44. Type: dashboardType,
  45. FolderIds: folderIDs,
  46. Permission: permission,
  47. }
  48. err := bus.Dispatch(&searchQuery)
  49. if err != nil {
  50. c.JsonApiErr(500, "Search failed", err)
  51. return
  52. }
  53. c.TimeRequest(metrics.M_Api_Dashboard_Search)
  54. c.JSON(200, searchQuery.Result)
  55. }