From 73c018b2986eec5518755adb8df640c11da71052 Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Fri, 25 Apr 2025 12:50:03 +0300 Subject: [PATCH] Bootdata: Expose grafanaBootData under /bootdata URL (#104258) --- .../v0alpha1/dashboard_object_gen.go | 2 - .../dashboard/v1beta1/dashboard_object_gen.go | 2 - apps/dashboard/pkg/apis/dashboard_manifest.go | 2 - pkg/api/api.go | 3 ++ pkg/api/dtos/index.go | 52 +++++++++---------- pkg/api/frontendsettings.go | 12 +++++ 6 files changed, 41 insertions(+), 32 deletions(-) diff --git a/apps/dashboard/pkg/apis/dashboard/v0alpha1/dashboard_object_gen.go b/apps/dashboard/pkg/apis/dashboard/v0alpha1/dashboard_object_gen.go index 50847df87c3..a267e0c8df8 100644 --- a/apps/dashboard/pkg/apis/dashboard/v0alpha1/dashboard_object_gen.go +++ b/apps/dashboard/pkg/apis/dashboard/v0alpha1/dashboard_object_gen.go @@ -294,8 +294,6 @@ var _ resource.ListObject = &DashboardList{} // Copy methods for all subresource types - - // DeepCopy creates a full deep copy of DashboardStatus func (s *DashboardStatus) DeepCopy() *DashboardStatus { cpy := &DashboardStatus{} diff --git a/apps/dashboard/pkg/apis/dashboard/v1beta1/dashboard_object_gen.go b/apps/dashboard/pkg/apis/dashboard/v1beta1/dashboard_object_gen.go index 1423c7b0603..be021b5f003 100644 --- a/apps/dashboard/pkg/apis/dashboard/v1beta1/dashboard_object_gen.go +++ b/apps/dashboard/pkg/apis/dashboard/v1beta1/dashboard_object_gen.go @@ -294,8 +294,6 @@ var _ resource.ListObject = &DashboardList{} // Copy methods for all subresource types - - // DeepCopy creates a full deep copy of DashboardStatus func (s *DashboardStatus) DeepCopy() *DashboardStatus { cpy := &DashboardStatus{} diff --git a/apps/dashboard/pkg/apis/dashboard_manifest.go b/apps/dashboard/pkg/apis/dashboard_manifest.go index e8ebdfbc5ed..cc5451a78e8 100644 --- a/apps/dashboard/pkg/apis/dashboard_manifest.go +++ b/apps/dashboard/pkg/apis/dashboard_manifest.go @@ -11,8 +11,6 @@ import ( "github.com/grafana/grafana-app-sdk/app" ) -var () - var appManifestData = app.ManifestData{ AppName: "dashboard", Group: "dashboard.grafana.app", diff --git a/pkg/api/api.go b/pkg/api/api.go index fbcded89e6d..5503e367dfe 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -92,6 +92,9 @@ func (hs *HTTPServer) registerRoutes() { panic(err) // ??? } r.Get("/mtfe", index.HandleRequest) + + // Temporarily expose the full bootdata via API + r.Get("/bootdata", reqNoAuth, hs.GetBootdata) } // authed views diff --git a/pkg/api/dtos/index.go b/pkg/api/dtos/index.go index 6fa2d3766b8..2a55017e613 100644 --- a/pkg/api/dtos/index.go +++ b/pkg/api/dtos/index.go @@ -7,33 +7,33 @@ import ( ) type IndexViewData struct { - User *CurrentUser - Settings *FrontendSettingsDTO - AppUrl string - AppSubUrl string - GoogleAnalyticsId string - GoogleAnalytics4Id string - GoogleAnalytics4SendManualPageViews bool - GoogleTagManagerId string - NavTree *navtree.NavTreeRoot - BuildVersion string - BuildCommit string - ThemeType string - NewGrafanaVersionExists bool - NewGrafanaVersion string - AppName string - AppNameBodyClass string - FavIcon template.URL - AppleTouchIcon template.URL - AppTitle string - LoadingLogo template.URL - CSPContent string - CSPEnabled bool - IsDevelopmentEnv bool + User *CurrentUser `json:"user"` + Settings *FrontendSettingsDTO `json:"settings"` + AppUrl string `json:"-"` + AppSubUrl string `json:"-"` + GoogleAnalyticsId string `json:"-"` + GoogleAnalytics4Id string `json:"-"` + GoogleAnalytics4SendManualPageViews bool `json:"-"` + GoogleTagManagerId string `json:"-"` + NavTree *navtree.NavTreeRoot `json:"navtree"` + BuildVersion string `json:"-"` + BuildCommit string `json:"-"` + ThemeType string `json:"-"` + NewGrafanaVersionExists bool `json:"-"` + NewGrafanaVersion string `json:"-"` + AppName string `json:"-"` + AppNameBodyClass string `json:"-"` + FavIcon template.URL `json:"-"` + AppleTouchIcon template.URL `json:"-"` + AppTitle string `json:"-"` + LoadingLogo template.URL `json:"-"` + CSPContent string `json:"-"` + CSPEnabled bool `json:"-"` + IsDevelopmentEnv bool `json:"-"` // Nonce is a cryptographic identifier for use with Content Security Policy. - Nonce string - NewsFeedEnabled bool - Assets *EntryPointAssets // Includes CDN info + Nonce string `json:"-"` + NewsFeedEnabled bool `json:"-"` + Assets *EntryPointAssets `json:"assets"` // Includes CDN info } type EntryPointAssets struct { diff --git a/pkg/api/frontendsettings.go b/pkg/api/frontendsettings.go index 935455a09c4..5333033d2bc 100644 --- a/pkg/api/frontendsettings.go +++ b/pkg/api/frontendsettings.go @@ -28,6 +28,18 @@ import ( "github.com/grafana/grafana/pkg/util" ) +// GetBootdataAPI returns the same data we currently have rendered into index.html +// NOTE: this should not be added to the public API docs, and is useful for a transition +// towards a fully static index.html -- this will likely be replaced with multiple calls +func (hs *HTTPServer) GetBootdata(c *contextmodel.ReqContext) { + data, err := hs.setIndexViewData(c) + if err != nil { + c.Handle(hs.Cfg, http.StatusInternalServerError, "Failed to get settings", err) + return + } + c.JSON(http.StatusOK, data) +} + // Returns a file that is easy to check for changes // Any changes to the file means we should refresh the frontend func (hs *HTTPServer) GetFrontendAssets(c *contextmodel.ReqContext) {