mirror of
https://github.com/grafana/grafana.git
synced 2024-11-27 11:20:27 -06:00
8b0dd4244b
* Search: Fixes search limits and adds a page parameter This adds a page parameter to search api without adding any major breaking change. It does at an api validation error when trying to use a limit beyond 5000. This is a breaking change. We could remove this and have it only in the docs and describe that this is a limit that grafana will apply silently. Fixes #16049 * Fix: Corrected wrong array slice change * Docs: minor docs fix * Search: fixed folder tests * Fixed: Moved limit to correct inner query * Search: moving limit check and page check * Search: limit in handler is no longer needed
76 lines
1.5 KiB
Go
76 lines
1.5 KiB
Go
package search
|
|
|
|
import (
|
|
"sort"
|
|
|
|
"github.com/grafana/grafana/pkg/bus"
|
|
m "github.com/grafana/grafana/pkg/models"
|
|
"github.com/grafana/grafana/pkg/registry"
|
|
)
|
|
|
|
func init() {
|
|
registry.RegisterService(&SearchService{})
|
|
}
|
|
|
|
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 {
|
|
dashQuery := FindPersistedDashboardsQuery{
|
|
Title: query.Title,
|
|
SignedInUser: query.SignedInUser,
|
|
IsStarred: query.IsStarred,
|
|
DashboardIds: query.DashboardIds,
|
|
Type: query.Type,
|
|
FolderIds: query.FolderIds,
|
|
Tags: query.Tags,
|
|
Limit: query.Limit,
|
|
Page: query.Page,
|
|
Permission: query.Permission,
|
|
}
|
|
|
|
if err := bus.Dispatch(&dashQuery); err != nil {
|
|
return err
|
|
}
|
|
|
|
hits := make(HitList, 0)
|
|
hits = append(hits, dashQuery.Result...)
|
|
|
|
// sort main result array
|
|
sort.Sort(hits)
|
|
|
|
// sort tags
|
|
for _, hit := range hits {
|
|
sort.Strings(hit.Tags)
|
|
}
|
|
|
|
// add isStarred info
|
|
if err := setIsStarredFlagOnSearchResults(query.SignedInUser.UserId, hits); err != nil {
|
|
return err
|
|
}
|
|
|
|
query.Result = hits
|
|
return nil
|
|
}
|
|
|
|
func setIsStarredFlagOnSearchResults(userId int64, hits []*Hit) error {
|
|
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
|
|
}
|