handlers.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. }
  21. if err := bus.Dispatch(&dashQuery); err != nil {
  22. return err
  23. }
  24. hits := make(HitList, 0)
  25. hits = append(hits, dashQuery.Result...)
  26. // sort main result array
  27. sort.Sort(hits)
  28. if len(hits) > query.Limit {
  29. hits = hits[0:query.Limit]
  30. }
  31. // sort tags
  32. for _, hit := range hits {
  33. sort.Strings(hit.Tags)
  34. }
  35. // add isStarred info
  36. if err := setIsStarredFlagOnSearchResults(query.SignedInUser.UserId, hits); err != nil {
  37. return err
  38. }
  39. query.Result = hits
  40. return nil
  41. }
  42. func setIsStarredFlagOnSearchResults(userId int64, hits []*Hit) error {
  43. query := m.GetUserStarsQuery{UserId: userId}
  44. if err := bus.Dispatch(&query); err != nil {
  45. return err
  46. }
  47. for _, dash := range hits {
  48. if _, exists := query.Result[dash.Id]; exists {
  49. dash.IsStarred = true
  50. }
  51. }
  52. return nil
  53. }