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 && ( + + + + )}