diff --git a/pkg/services/dashboards/service/dashboard_service.go b/pkg/services/dashboards/service/dashboard_service.go index a2529dbcc47..3da1c24a2e3 100644 --- a/pkg/services/dashboards/service/dashboard_service.go +++ b/pkg/services/dashboards/service/dashboard_service.go @@ -1103,11 +1103,26 @@ func (dr *DashboardServiceImpl) GetDashboards(ctx context.Context, query *dashbo query.OrgID = requester.GetOrgID() } - return dr.searchDashboardsThroughK8s(ctx, &dashboards.FindPersistedDashboardsQuery{ + dashs, err := dr.searchDashboardsThroughK8s(ctx, &dashboards.FindPersistedDashboardsQuery{ DashboardIds: query.DashboardIDs, OrgId: query.OrgID, DashboardUIDs: query.DashboardUIDs, }) + if err != nil { + return nil, err + } + + // search only returns the metadata, need to get the dashboard.Data too + results := make([]*dashboards.Dashboard, len(dashs)) + for i, d := range dashs { + dash, err := dr.GetDashboard(ctx, &dashboards.GetDashboardQuery{OrgID: d.OrgID, UID: d.UID}) + if err != nil { + return nil, err + } + results[i] = dash + } + + return results, nil } return dr.dashboardStore.GetDashboards(ctx, query) diff --git a/pkg/services/dashboards/service/dashboard_service_test.go b/pkg/services/dashboards/service/dashboard_service_test.go index 410c8542f36..d17610fb1eb 100644 --- a/pkg/services/dashboards/service/dashboard_service_test.go +++ b/pkg/services/dashboards/service/dashboard_service_test.go @@ -1431,14 +1431,32 @@ func TestGetDashboards(t *testing.T) { Slug: "dashboard-1", OrgID: 1, Title: "Dashboard 1", + Data: simplejson.NewFromAny(map[string]any{"title": "Dashboard 1", "uid": "uid1"}), }, { UID: "uid2", Slug: "dashboard-2", OrgID: 1, Title: "Dashboard 2", + Data: simplejson.NewFromAny(map[string]any{"title": "Dashboard 2", "uid": "uid2"}), }, } + uid1Unstructured := &unstructured.Unstructured{Object: map[string]any{ + "metadata": map[string]any{ + "name": "uid1", + }, + "spec": map[string]any{ + "title": "Dashboard 1", + }, + }} + uid2Unstructured := &unstructured.Unstructured{Object: map[string]any{ + "metadata": map[string]any{ + "name": "uid2", + }, + "spec": map[string]any{ + "title": "Dashboard 2", + }, + }} queryByIDs := &dashboards.GetDashboardsQuery{ DashboardIDs: []int64{1, 2}, OrgID: 1, @@ -1467,6 +1485,8 @@ func TestGetDashboards(t *testing.T) { t.Run("Should use Kubernetes client if feature flags are enabled", func(t *testing.T) { ctx, k8sCliMock := setupK8sDashboardTests(service) + k8sCliMock.On("Get", mock.Anything, "uid1", mock.Anything, mock.Anything).Return(uid1Unstructured, nil) + k8sCliMock.On("Get", mock.Anything, "uid2", mock.Anything, mock.Anything).Return(uid2Unstructured, nil) k8sCliMock.On("Search", mock.Anything, mock.Anything, mock.Anything).Return(&resource.ResourceSearchResponse{ Results: &resource.ResourceTable{ Columns: []*resource.ResourceTableColumnDefinition{