From 467302480f4a6476e8b82ba0ef4f9918c65fd21f Mon Sep 17 00:00:00 2001 From: Arati R <33031346+suntala@users.noreply.github.com> Date: Wed, 28 Feb 2024 16:11:09 +0100 Subject: [PATCH] Search: Include collapsed panels in search v2 (#83047) * Include collapsed panels in searchv2 * Include collapsed row in TestReadSummaries --- pkg/services/store/kind/dashboard/summary.go | 77 +++++++++++-------- .../testdata/with-library-panels-info.json | 30 ++++++++ .../testdata/with-library-panels.json | 28 +++++++ 3 files changed, 104 insertions(+), 31 deletions(-) diff --git a/pkg/services/store/kind/dashboard/summary.go b/pkg/services/store/kind/dashboard/summary.go index 5850bd19fb5..7987f1c6c1e 100644 --- a/pkg/services/store/kind/dashboard/summary.go +++ b/pkg/services/store/kind/dashboard/summary.go @@ -60,43 +60,58 @@ func NewStaticDashboardSummaryBuilder(lookup DatasourceLookup, sanitize bool) en summary.Fields["schemaVersion"] = fmt.Sprint(dash.SchemaVersion) for _, panel := range dash.Panels { - panelRefs := NewReferenceAccumulator() - p := &entity.EntitySummary{ - UID: uid + "#" + strconv.FormatInt(panel.ID, 10), - Kind: "panel", - } - p.Name = panel.Title - p.Description = panel.Description - p.Fields = make(map[string]string, 0) - p.Fields["type"] = panel.Type - - if panel.Type != "row" { - panelRefs.Add(entity.ExternalEntityReferencePlugin, string(plugins.TypePanel), panel.Type) - dashboardRefs.Add(entity.ExternalEntityReferencePlugin, string(plugins.TypePanel), panel.Type) - } - if panel.LibraryPanel != "" { - panelRefs.Add(entity.StandardKindLibraryPanel, panel.Type, panel.LibraryPanel) - dashboardRefs.Add(entity.StandardKindLibraryPanel, panel.Type, panel.LibraryPanel) - } - for _, v := range panel.Datasource { - dashboardRefs.Add(entity.StandardKindDataSource, v.Type, v.UID) - panelRefs.Add(entity.StandardKindDataSource, v.Type, v.UID) - if v.Type != "" { - dashboardRefs.Add(entity.ExternalEntityReferencePlugin, string(plugins.TypeDataSource), v.Type) - } - } - for _, v := range panel.Transformer { - panelRefs.Add(entity.ExternalEntityReferenceRuntime, entity.ExternalEntityReferenceRuntime_Transformer, v) - dashboardRefs.Add(entity.ExternalEntityReferenceRuntime, entity.ExternalEntityReferenceRuntime_Transformer, v) - } - p.References = panelRefs.Get() - summary.Nested = append(summary.Nested, p) + s := panelSummary(panel, uid, dashboardRefs) + summary.Nested = append(summary.Nested, s...) } summary.References = dashboardRefs.Get() if sanitize { body, err = json.MarshalIndent(parsed, "", " ") } + return summary, body, err } } + +// panelSummary take panel info and returns entity summaries for the given panel and all its collapsed panels. +func panelSummary(panel panelInfo, uid string, dashboardRefs ReferenceAccumulator) []*entity.EntitySummary { + panels := []*entity.EntitySummary{} + + panelRefs := NewReferenceAccumulator() + p := &entity.EntitySummary{ + UID: uid + "#" + strconv.FormatInt(panel.ID, 10), + Kind: "panel", + } + p.Name = panel.Title + p.Description = panel.Description + p.Fields = make(map[string]string, 0) + p.Fields["type"] = panel.Type + + if panel.Type != "row" { + panelRefs.Add(entity.ExternalEntityReferencePlugin, string(plugins.TypePanel), panel.Type) + dashboardRefs.Add(entity.ExternalEntityReferencePlugin, string(plugins.TypePanel), panel.Type) + } + if panel.LibraryPanel != "" { + panelRefs.Add(entity.StandardKindLibraryPanel, panel.Type, panel.LibraryPanel) + dashboardRefs.Add(entity.StandardKindLibraryPanel, panel.Type, panel.LibraryPanel) + } + for _, v := range panel.Datasource { + dashboardRefs.Add(entity.StandardKindDataSource, v.Type, v.UID) + panelRefs.Add(entity.StandardKindDataSource, v.Type, v.UID) + if v.Type != "" { + dashboardRefs.Add(entity.ExternalEntityReferencePlugin, string(plugins.TypeDataSource), v.Type) + } + } + for _, v := range panel.Transformer { + panelRefs.Add(entity.ExternalEntityReferenceRuntime, entity.ExternalEntityReferenceRuntime_Transformer, v) + dashboardRefs.Add(entity.ExternalEntityReferenceRuntime, entity.ExternalEntityReferenceRuntime_Transformer, v) + } + p.References = panelRefs.Get() + panels = append(panels, p) + + for _, c := range panel.Collapsed { + collapsed := panelSummary(c, uid, dashboardRefs) + panels = append(panels, collapsed...) + } + return panels +} diff --git a/pkg/services/store/kind/dashboard/testdata/with-library-panels-info.json b/pkg/services/store/kind/dashboard/testdata/with-library-panels-info.json index e360bc820e0..670b69576aa 100644 --- a/pkg/services/store/kind/dashboard/testdata/with-library-panels-info.json +++ b/pkg/services/store/kind/dashboard/testdata/with-library-panels-info.json @@ -45,6 +45,32 @@ "type": "panel" } ] + }, + { + "UID": "with-library-panels#3", + "kind": "panel", + "name": "collapsed row", + "fields": { + "type": "row" + } + }, + { + "UID": "with-library-panels#42", + "kind": "panel", + "name": "blue pie", + "fields": { + "type": "" + }, + "references": [ + { + "family": "librarypanel", + "identifier": "l3d2s634-fdgf-75u4-3fg3-67j966ii7jur" + }, + { + "family": "plugin", + "type": "panel" + } + ] } ], "references": [ @@ -59,6 +85,10 @@ "family": "librarypanel", "identifier": "e1d5f519-dabd-47c6-9ad7-83d181ce1cee" }, + { + "family": "librarypanel", + "identifier": "l3d2s634-fdgf-75u4-3fg3-67j966ii7jur" + }, { "family": "plugin", "type": "panel" diff --git a/pkg/services/store/kind/dashboard/testdata/with-library-panels.json b/pkg/services/store/kind/dashboard/testdata/with-library-panels.json index 3dd0faeb9a1..cecd1c64e60 100644 --- a/pkg/services/store/kind/dashboard/testdata/with-library-panels.json +++ b/pkg/services/store/kind/dashboard/testdata/with-library-panels.json @@ -49,6 +49,34 @@ "uid": "e1d5f519-dabd-47c6-9ad7-83d181ce1cee" }, "title": "green pie" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 9 + }, + "id": 3, + "panels": [ + { + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 0 + }, + "id": 42, + "libraryPanel": { + "name": "blue pie", + "uid": "l3d2s634-fdgf-75u4-3fg3-67j966ii7jur" + }, + "title": "blue pie" + } + ], + "title": "collapsed row", + "type": "row" } ], "refresh": "",