diff --git a/conf/defaults.ini b/conf/defaults.ini index 7259eb827ab..b4e5a1ddfae 100644 --- a/conf/defaults.ini +++ b/conf/defaults.ini @@ -212,3 +212,11 @@ max_days = 7 enabled = false rabbitmq_url = amqp://localhost/ exchange = grafana_events + +#################################### Dashboard JSON files ########################## +[dashboards.json] +enabled = false +path = dashboards +orgs = * + + diff --git a/main.go b/main.go index ffe7e3d7cd3..e794e4dfe4e 100644 --- a/main.go +++ b/main.go @@ -15,6 +15,7 @@ import ( "github.com/grafana/grafana/pkg/metrics" "github.com/grafana/grafana/pkg/plugins" "github.com/grafana/grafana/pkg/services/eventpublisher" + "github.com/grafana/grafana/pkg/services/search" "github.com/grafana/grafana/pkg/services/sqlstore" "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/social" @@ -51,6 +52,7 @@ func main() { initRuntime() writePIDFile() + search.Init() social.NewOAuthService() eventpublisher.Init() plugins.Init() diff --git a/pkg/api/search.go b/pkg/api/search.go index c37bba7b669..592377129a2 100644 --- a/pkg/api/search.go +++ b/pkg/api/search.go @@ -4,28 +4,9 @@ import ( "github.com/grafana/grafana/pkg/bus" "github.com/grafana/grafana/pkg/middleware" m "github.com/grafana/grafana/pkg/models" + "github.com/grafana/grafana/pkg/services/search" ) -// TODO: this needs to be cached or improved somehow -func setIsStarredFlagOnSearchResults(c *middleware.Context, hits []*m.DashboardSearchHit) error { - if !c.IsSignedIn { - return nil - } - - query := m.GetUserStarsQuery{UserId: c.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 -} - func Search(c *middleware.Context) { query := c.Query("query") tag := c.Query("tag") @@ -54,7 +35,7 @@ func Search(c *middleware.Context) { result.TagsOnly = true } else { - query := m.SearchDashboardsQuery{ + query := search.Query{ Title: query, Tag: tag, UserId: c.UserId, @@ -69,11 +50,6 @@ func Search(c *middleware.Context) { return } - if err := setIsStarredFlagOnSearchResults(c, query.Result); err != nil { - c.JsonApiErr(500, "Failed to get user stars", err) - return - } - result.Dashboards = query.Result } diff --git a/pkg/services/search/jsonfiles.go b/pkg/services/search/jsonfiles.go new file mode 100644 index 00000000000..0ddcf62e6c8 --- /dev/null +++ b/pkg/services/search/jsonfiles.go @@ -0,0 +1,12 @@ +package search + +var ( + // settings + DashboardsJsonEnabled bool + DashboardsJsonPath string + DashboardJsonOrgs string +) + +func initJsonFileIndex() { + +} diff --git a/pkg/services/search/search.go b/pkg/services/search/search.go new file mode 100644 index 00000000000..93d49ec85a3 --- /dev/null +++ b/pkg/services/search/search.go @@ -0,0 +1,59 @@ +package search + +import ( + "github.com/grafana/grafana/pkg/bus" + m "github.com/grafana/grafana/pkg/models" +) + +type Query struct { + Title string + Tag string + OrgId int64 + UserId int64 + Limit int + IsStarred bool + + Result []*m.DashboardSearchHit +} + +func Init() { + bus.AddHandler("search", searchHandler) + initJsonFileIndex() +} + +func searchHandler(query *Query) error { + dashQuery := m.SearchDashboardsQuery{ + Title: query.Title, + Tag: query.Tag, + UserId: query.UserId, + Limit: query.Limit, + IsStarred: query.IsStarred, + OrgId: query.OrgId, + } + + if err := bus.Dispatch(&dashQuery); err != nil { + return err + } + + if err := setIsStarredFlagOnSearchResults(query.UserId, query.Result); err != nil { + return err + } + + query.Result = dashQuery.Result + return nil +} + +func setIsStarredFlagOnSearchResults(userId int64, hits []*m.DashboardSearchHit) 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 +}