handlers.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package search
  2. import (
  3. "sort"
  4. "github.com/grafana/grafana/pkg/bus"
  5. m "github.com/grafana/grafana/pkg/models"
  6. )
  7. func Init() {
  8. bus.AddHandler("search", searchHandler)
  9. }
  10. func searchHandler(query *Query) error {
  11. dashQuery := FindPersistedDashboardsQuery{
  12. Title: query.Title,
  13. SignedInUser: query.SignedInUser,
  14. IsStarred: query.IsStarred,
  15. DashboardIds: query.DashboardIds,
  16. Type: query.Type,
  17. FolderIds: query.FolderIds,
  18. Tags: query.Tags,
  19. Limit: query.Limit,
  20. Permission: query.Permission,
  21. }
  22. if err := bus.Dispatch(&dashQuery); err != nil {
  23. return err
  24. }
  25. hits := make(HitList, 0)
  26. hits = append(hits, dashQuery.Result...)
  27. // sort main result array
  28. sort.Sort(hits)
  29. if len(hits) > query.Limit {
  30. hits = hits[0:query.Limit]
  31. }
  32. // sort tags
  33. for _, hit := range hits {
  34. sort.Strings(hit.Tags)
  35. }
  36. // add isStarred info
  37. if err := setIsStarredFlagOnSearchResults(query.SignedInUser.UserId, hits); err != nil {
  38. return err
  39. }
  40. query.Result = hits
  41. return nil
  42. }
  43. func setIsStarredFlagOnSearchResults(userId int64, hits []*Hit) error {
  44. query := m.GetUserStarsQuery{UserId: userId}
  45. if err := bus.Dispatch(&query); err != nil {
  46. return err
  47. }
  48. for _, dash := range hits {
  49. if _, exists := query.Result[dash.Id]; exists {
  50. dash.IsStarred = true
  51. }
  52. }
  53. return nil
  54. }