[Dashboard] Revert feature toggle trimdefaults (#34888)

* Revert "solve comments and retrigger the test"

This reverts commit f08d2d9eca.

* Revert "update api doc"

This reverts commit cc09ceb853.

* Revert "remove post trim"

This reverts commit 46fe8ed596.

* Revert "fix typo"

This reverts commit 3b3ceee16e.

* Revert "Apply suggestions from code review"

This reverts commit 3b7f3b8e15.

* Revert "update comments"

This reverts commit b9c6260876.

* Revert "update doc"

This reverts commit 8e4c4d7c93.

* Revert "remove feature toggle + add libraryPaneldefinition"

This reverts commit d01cfcc2ed.

* fix some typos

* Update public/app/features/dashboard/components/ShareModal/ShareExport.tsx

Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>

* 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 <marcus.efraimsson@gmail.com>
Co-authored-by: achatterjee-grafana <70489351+achatterjee-grafana@users.noreply.github.com>
pull/34951/head
ying-jeanne 4 years ago committed by GitHub
parent f16b2c40c1
commit b391e43472
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      docs/sources/dashboards/export-import.md
  2. 94
      docs/sources/http_api/dashboard.md
  3. 7
      pkg/api/dashboard.go
  4. 2
      pkg/api/plugins.go
  5. 6
      pkg/services/schemaloader/schemaloader.go
  6. 5
      pkg/setting/setting.go
  7. 3
      public/app/features/dashboard/components/ShareModal/ShareExport.tsx

@ -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**.

@ -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.

@ -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)
trimedResult := *dash
if !hs.LoadSchemaService.IsDisabled() {
trimedResult, err = hs.LoadSchemaService.DashboardTrimDefaults(*dash)
if err != nil {
return response.Error(500, "Error while trim default value from dashboard json", err)
return response.Error(500, "Error while exporting with default values removed", err)
}
}
dto := dtos.TrimDashboardFullWithMeta{

@ -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)

@ -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()

@ -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"]

@ -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<Props, State> {
<Field label="Export for sharing externally">
<Switch value={shareExternally} onChange={this.onShareExternallyChange} />
</Field>
{config.featureToggles.trimDefaults && (
<Field label="Export with default values removed">
<Switch value={trimDefaults} onChange={this.onTrimDefaultsChange} />
</Field>
)}
<Modal.ButtonRow>
<Button variant="secondary" onClick={onDismiss} fill="outline">
Cancel

Loading…
Cancel
Save