2015-05-11 20:03:57 +02:00
|
|
|
package search
|
|
|
|
|
|
|
|
|
|
import (
|
2015-05-13 13:36:13 +02:00
|
|
|
"sort"
|
2015-05-12 12:20:03 +02:00
|
|
|
|
2015-05-11 20:03:57 +02:00
|
|
|
"github.com/grafana/grafana/pkg/bus"
|
|
|
|
|
m "github.com/grafana/grafana/pkg/models"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func Init() {
|
|
|
|
|
bus.AddHandler("search", searchHandler)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func searchHandler(query *Query) error {
|
2015-05-13 13:36:13 +02:00
|
|
|
dashQuery := FindPersistedDashboardsQuery{
|
2016-03-05 12:26:21 +01:00
|
|
|
Title: query.Title,
|
2017-06-17 02:33:53 +02:00
|
|
|
SignedInUser: query.SignedInUser,
|
2016-03-05 12:26:21 +01:00
|
|
|
IsStarred: query.IsStarred,
|
|
|
|
|
DashboardIds: query.DashboardIds,
|
2017-05-24 18:28:13 +02:00
|
|
|
Type: query.Type,
|
2017-11-20 12:47:03 +01:00
|
|
|
FolderIds: query.FolderIds,
|
2017-06-23 17:13:58 -04:00
|
|
|
Tags: query.Tags,
|
|
|
|
|
Limit: query.Limit,
|
2018-02-08 17:11:01 +01:00
|
|
|
Permission: query.Permission,
|
2015-05-11 20:03:57 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := bus.Dispatch(&dashQuery); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
2017-06-23 17:13:58 -04:00
|
|
|
hits := make(HitList, 0)
|
2015-05-12 12:20:03 +02:00
|
|
|
hits = append(hits, dashQuery.Result...)
|
|
|
|
|
|
2015-06-02 11:04:06 +02:00
|
|
|
// sort main result array
|
|
|
|
|
sort.Sort(hits)
|
|
|
|
|
|
|
|
|
|
if len(hits) > query.Limit {
|
2015-06-03 14:53:40 +02:00
|
|
|
hits = hits[0:query.Limit]
|
2015-06-02 11:04:06 +02:00
|
|
|
}
|
|
|
|
|
|
2015-06-02 10:24:20 +02:00
|
|
|
// sort tags
|
|
|
|
|
for _, hit := range hits {
|
|
|
|
|
sort.Strings(hit.Tags)
|
|
|
|
|
}
|
|
|
|
|
|
2015-06-02 09:00:17 +02:00
|
|
|
// add isStarred info
|
2017-06-17 02:33:53 +02:00
|
|
|
if err := setIsStarredFlagOnSearchResults(query.SignedInUser.UserId, hits); err != nil {
|
2015-05-11 20:03:57 +02:00
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
2015-05-12 12:20:03 +02:00
|
|
|
query.Result = hits
|
2015-05-11 20:03:57 +02:00
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
2015-05-13 13:36:13 +02:00
|
|
|
func setIsStarredFlagOnSearchResults(userId int64, hits []*Hit) error {
|
2015-05-11 20:03:57 +02: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
|
|
|
|
|
}
|