2015-05-11 13:03:57 -05:00
|
|
|
package search
|
|
|
|
|
|
|
|
import (
|
2015-05-13 06:36:13 -05:00
|
|
|
"sort"
|
2015-05-12 05:20:03 -05:00
|
|
|
|
2015-05-11 13:03:57 -05:00
|
|
|
"github.com/grafana/grafana/pkg/bus"
|
|
|
|
m "github.com/grafana/grafana/pkg/models"
|
2018-04-27 06:41:58 -05:00
|
|
|
"github.com/grafana/grafana/pkg/registry"
|
2015-05-11 13:03:57 -05:00
|
|
|
)
|
|
|
|
|
2018-04-27 06:41:58 -05:00
|
|
|
func init() {
|
|
|
|
registry.RegisterService(&SearchService{})
|
2015-05-11 13:03:57 -05:00
|
|
|
}
|
|
|
|
|
2018-04-27 06:41:58 -05:00
|
|
|
type SearchService struct {
|
|
|
|
Bus bus.Bus `inject:""`
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *SearchService) Init() error {
|
|
|
|
s.Bus.AddHandler(s.searchHandler)
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *SearchService) searchHandler(query *Query) error {
|
2015-05-13 06:36:13 -05:00
|
|
|
dashQuery := FindPersistedDashboardsQuery{
|
2016-03-05 05:26:21 -06:00
|
|
|
Title: query.Title,
|
2017-06-16 19:33:53 -05:00
|
|
|
SignedInUser: query.SignedInUser,
|
2016-03-05 05:26:21 -06:00
|
|
|
IsStarred: query.IsStarred,
|
|
|
|
DashboardIds: query.DashboardIds,
|
2017-05-24 11:28:13 -05:00
|
|
|
Type: query.Type,
|
2017-11-20 05:47:03 -06:00
|
|
|
FolderIds: query.FolderIds,
|
2017-06-23 16:13:58 -05:00
|
|
|
Tags: query.Tags,
|
|
|
|
Limit: query.Limit,
|
2019-04-17 06:07:50 -05:00
|
|
|
Page: query.Page,
|
2018-02-08 10:11:01 -06:00
|
|
|
Permission: query.Permission,
|
2015-05-11 13:03:57 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
if err := bus.Dispatch(&dashQuery); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
2017-06-23 16:13:58 -05:00
|
|
|
hits := make(HitList, 0)
|
2015-05-12 05:20:03 -05:00
|
|
|
hits = append(hits, dashQuery.Result...)
|
|
|
|
|
2015-06-02 04:04:06 -05:00
|
|
|
// sort main result array
|
|
|
|
sort.Sort(hits)
|
|
|
|
|
2015-06-02 03:24:20 -05:00
|
|
|
// sort tags
|
|
|
|
for _, hit := range hits {
|
|
|
|
sort.Strings(hit.Tags)
|
|
|
|
}
|
|
|
|
|
2015-06-02 02:00:17 -05:00
|
|
|
// add isStarred info
|
2017-06-16 19:33:53 -05:00
|
|
|
if err := setIsStarredFlagOnSearchResults(query.SignedInUser.UserId, hits); err != nil {
|
2015-05-11 13:03:57 -05:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
2015-05-12 05:20:03 -05:00
|
|
|
query.Result = hits
|
2015-05-11 13:03:57 -05:00
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2015-05-13 06:36:13 -05:00
|
|
|
func setIsStarredFlagOnSearchResults(userId int64, hits []*Hit) error {
|
2015-05-11 13:03:57 -05:00
|
|
|
query := m.GetUserStarsQuery{UserId: userId}
|
|
|
|
if err := bus.Dispatch(&query); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, dash := range hits {
|
|
|
|
if _, exists := query.Result[dash.Id]; exists {
|
|
|
|
dash.IsStarred = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|