From b391e43472c8be24f64a9874195d7ca27fc9c439 Mon Sep 17 00:00:00 2001 From: ying-jeanne <74549700+ying-jeanne@users.noreply.github.com> Date: Sat, 29 May 2021 04:29:30 +0800 Subject: [PATCH] [Dashboard] Revert feature toggle trimdefaults (#34888) * Revert "solve comments and retrigger the test" This reverts commit f08d2d9eca1912f89a535d7231e653ff26987a5c. * Revert "update api doc" This reverts commit cc09ceb8535fe54f654355d393d1c7f6809518e1. * Revert "remove post trim" This reverts commit 46fe8ed596ada5a047a337088278a4195b05fead. * Revert "fix typo" This reverts commit 3b3ceee16ed56d982035016d7a1c795972af6de9. * Revert "Apply suggestions from code review" This reverts commit 3b7f3b8e15c9d3f8ed1abb14a4f4013ffdc16d27. * Revert "update comments" This reverts commit b9c6260876b02b821ea91f4f2d080efe359d1787. * Revert "update doc" This reverts commit 8e4c4d7c93e9a1c58322e4cfca447c3b4dee148b. * Revert "remove feature toggle + add libraryPaneldefinition" This reverts commit d01cfcc2edd2cfcd675f658e85ad580ac995eb47. * fix some typos * Update public/app/features/dashboard/components/ShareModal/ShareExport.tsx Co-authored-by: Marcus Efraimsson * Update docs/sources/dashboards/export-import.md Co-authored-by: achatterjee-grafana <70489351+achatterjee-grafana@users.noreply.github.com> * fix comments Co-authored-by: Marcus Efraimsson Co-authored-by: achatterjee-grafana <70489351+achatterjee-grafana@users.noreply.github.com> --- docs/sources/dashboards/export-import.md | 10 +- docs/sources/http_api/dashboard.md | 94 ------------------- pkg/api/dashboard.go | 9 +- pkg/api/plugins.go | 2 +- pkg/services/schemaloader/schemaloader.go | 6 ++ pkg/setting/setting.go | 5 + .../components/ShareModal/ShareExport.tsx | 9 +- 7 files changed, 26 insertions(+), 109 deletions(-) diff --git a/docs/sources/dashboards/export-import.md b/docs/sources/dashboards/export-import.md index 4953590f61d..4e0930d1c98 100644 --- a/docs/sources/dashboards/export-import.md +++ b/docs/sources/dashboards/export-import.md @@ -15,7 +15,7 @@ Dashboards are exported in Grafana JSON format, and contain everything you need The export feature is accessed in the share window which you open by clicking the share button in the dashboard menu. -{{< figure src="/static/img/docs/export/export-modal-8-0.png" max-width="800px" >}} +{{< figure src="/static/img/docs/export/export-modal.png" max-width="800px" >}} ### Making a dashboard portable @@ -25,13 +25,7 @@ add template variables for things like a metric prefix (use constant variable) a A template variable of the type `Constant` will automatically be hidden in the dashboard, and will also be added as a required input when the dashboard is imported. -### Export dashboard without default values - -To export a dashboard without the default values in order to reduce the exported JSON file size, check the toggle **Export with default values removed** option. - -During import, the removed default values are automatically added back to the dashboard. - -## Import a dashboard +## Import dashboard To import a dashboard click the + icon in the side menu, and then click **Import**. diff --git a/docs/sources/http_api/dashboard.md b/docs/sources/http_api/dashboard.md index f5a873af3d7..b64d61f7e19 100644 --- a/docs/sources/http_api/dashboard.md +++ b/docs/sources/http_api/dashboard.md @@ -440,100 +440,6 @@ Content-Type: application/json ## Dashboard Search See [Folder/Dashboard Search API]({{< relref "folder_dashboard_search.md" >}}). -## Remove default values in dashboard - -`POST /api/dashboards/trim` - -Will remove default values from input dashboard JSON. - -**Example Request for trimming dashboard JSON**: - -```http -POST /api/dashboards/trim HTTP/1.1 -Accept: application/json -Content-Type: application/json -Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk - -{ - "meta": { - "isStarred": false, - "url": "/d/cIBgcSjkk/production-overview", - "folderId": 2, - "folderUid": "l3KqBxCMz", - "slug": "production-overview" - }, - "dashboard": { - "id": 112, - "panels": [ - { - "datasource": null, - "description": "", - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 0 - }, - "id": 2, - "options": { - "feedUrl": "https://grafana.com/blog/news.xml", - "showImage": true - }, - "pluginVersion": "8.1.0-pre", - "title": "Panel Title", - "type": "news" - } - ], - "title": "test dashboard", - "uid": "9lzdzI3Mz", - "version": 2 - } -} -``` - -**Example Response**: - -```http -HTTP/1.1 200 -Content-Type: application/json - -{ - "meta": { - "folderId": 2, - "folderUid": "l3KqBxCMz", - "isStarred": false, - "slug": "production-overview", - "url": "/d/cIBgcSjkk/production-overview" - }, - "dashboard": { - "id": 112, - "panels": [ - { - "gridPos": {}, - "id": 2, - "options": { - "feedUrl": "https://grafana.com/blog/news.xml", - "showImage": true - }, - "pluginVersion": "8.1.0-pre", - "title": "Panel Title", - "type": "news" - } - ], - "title": "test dashboard", - "uid": "9lzdzI3Mz", - "version": 2 - } -} -``` - -Status Codes: - -- **200** – Trimmed -- **400** – Errors (invalid json, missing or invalid fields, etc) -- **401** – Unauthorized -- **403** – Access denied - ## Deprecated resources Please note that these resource have been deprecated and will be removed in a future release. diff --git a/pkg/api/dashboard.go b/pkg/api/dashboard.go index 34ccb2c79a4..b3ef5317ba5 100644 --- a/pkg/api/dashboard.go +++ b/pkg/api/dashboard.go @@ -51,9 +51,12 @@ func (hs *HTTPServer) TrimDashboard(c *models.ReqContext, cmd models.TrimDashboa dash := cmd.Dashboard meta := cmd.Meta - trimedResult, err := hs.LoadSchemaService.DashboardTrimDefaults(*dash) - if err != nil { - return response.Error(500, "Error while trim default value from dashboard json", err) + trimedResult := *dash + if !hs.LoadSchemaService.IsDisabled() { + trimedResult, err = hs.LoadSchemaService.DashboardTrimDefaults(*dash) + if err != nil { + return response.Error(500, "Error while exporting with default values removed", err) + } } dto := dtos.TrimDashboardFullWithMeta{ diff --git a/pkg/api/plugins.go b/pkg/api/plugins.go index b7d3486729e..48e75d4b972 100644 --- a/pkg/api/plugins.go +++ b/pkg/api/plugins.go @@ -213,7 +213,7 @@ func (hs *HTTPServer) ImportDashboard(c *models.ReqContext, apiCmd dtos.ImportDa } trimDefaults := c.QueryBoolWithDefault("trimdefaults", true) - if trimDefaults { + if trimDefaults && !hs.LoadSchemaService.IsDisabled() { apiCmd.Dashboard, err = hs.LoadSchemaService.DashboardApplyDefaults(apiCmd.Dashboard) if err != nil { return response.Error(500, "Error while applying default value to the dashboard json", err) diff --git a/pkg/services/schemaloader/schemaloader.go b/pkg/services/schemaloader/schemaloader.go index b922eb40dd9..647c6b206eb 100644 --- a/pkg/services/schemaloader/schemaloader.go +++ b/pkg/services/schemaloader/schemaloader.go @@ -50,6 +50,12 @@ func (rs *SchemaLoaderService) Init() error { } return nil } +func (rs *SchemaLoaderService) IsDisabled() bool { + if rs.Cfg == nil { + return true + } + return !rs.Cfg.IsTrimDefaultsEnabled() +} func (rs *SchemaLoaderService) DashboardApplyDefaults(input *simplejson.Json) (*simplejson.Json, error) { val, _ := input.Map() diff --git a/pkg/setting/setting.go b/pkg/setting/setting.go index 92fe6ef2a7b..b2081a77140 100644 --- a/pkg/setting/setting.go +++ b/pkg/setting/setting.go @@ -397,6 +397,11 @@ func (cfg Cfg) IsNgAlertEnabled() bool { return cfg.FeatureToggles["ngalert"] } +// IsTrimDefaultsEnabled returns whether the standalone trim dashboard default feature is enabled. +func (cfg Cfg) IsTrimDefaultsEnabled() bool { + return cfg.FeatureToggles["trimDefaults"] +} + // IsDatabaseMetricsEnabled returns whether the database instrumentation feature is enabled. func (cfg Cfg) IsDatabaseMetricsEnabled() bool { return cfg.FeatureToggles["database_metrics"] diff --git a/public/app/features/dashboard/components/ShareModal/ShareExport.tsx b/public/app/features/dashboard/components/ShareModal/ShareExport.tsx index e76dd006409..d97b21835d8 100644 --- a/public/app/features/dashboard/components/ShareModal/ShareExport.tsx +++ b/public/app/features/dashboard/components/ShareModal/ShareExport.tsx @@ -7,6 +7,7 @@ import { DashboardExporter } from 'app/features/dashboard/components/DashExportM import { appEvents } from 'app/core/core'; import { ShowModalReactEvent } from 'app/types/events'; import { ViewJsonModal } from './ViewJsonModal'; +import { config } from '@grafana/runtime'; interface Props { dashboard: DashboardModel; @@ -137,9 +138,11 @@ export class ShareExport extends PureComponent { - - - + {config.featureToggles.trimDefaults && ( + + + + )}