mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
[Dashboard] Revert feature toggle trimdefaults (#34888)
* Revert "solve comments and retrigger the test" This reverts commitf08d2d9eca
. * Revert "update api doc" This reverts commitcc09ceb853
. * Revert "remove post trim" This reverts commit46fe8ed596
. * Revert "fix typo" This reverts commit3b3ceee16e
. * Revert "Apply suggestions from code review" This reverts commit3b7f3b8e15
. * Revert "update comments" This reverts commitb9c6260876
. * Revert "update doc" This reverts commit8e4c4d7c93
. * Revert "remove feature toggle + add libraryPaneldefinition" This reverts commitd01cfcc2ed
. * 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>
This commit is contained in:
parent
f16b2c40c1
commit
b391e43472
@ -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)
|
||||
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{
|
||||
|
@ -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>
|
||||
<Field label="Export with default values removed">
|
||||
<Switch value={trimDefaults} onChange={this.onTrimDefaultsChange} />
|
||||
</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…
Reference in New Issue
Block a user