remove feature toggle + add libraryPaneldefinition (#34488) (#34798)

* remove feature toggle + add libraryPaneldefinition

* update doc

* update comments

* Apply suggestions from code review

Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>

* fix typo

* remove post trim

* update api doc

* solve comments and retrigger the test

Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
(cherry picked from commit c59a2e1bcf)

Co-authored-by: ying-jeanne <74549700+ying-jeanne@users.noreply.github.com>
This commit is contained in:
Grot (@grafanabot) 2021-05-27 11:03:54 +01:00 committed by GitHub
parent 0d0a795d02
commit 48b74313b5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 109 additions and 36 deletions

View File

@ -133,10 +133,6 @@ Family: scuemata.#Family & {
// The values depend on panel type
options: {...}
libraryPanel?: {
name: string,
uid: string
}
fieldConfig: {
defaults: {
...

View File

@ -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.
{{< docs-imagebox img="/img/docs/export/export-modal.png" max-width="800px" >}}
{{< docs-imagebox img="/img/docs/export/export-modal-8-0.png" max-width="800px" >}}
### Making a dashboard portable
@ -25,7 +25,13 @@ 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.
## Importing a dashboard
### 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
To import a dashboard click the + icon in the side menu, and then click **Import**.

View File

@ -440,6 +440,100 @@ 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/uid/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.

View File

@ -52,11 +52,9 @@ func (hs *HTTPServer) TrimDashboard(c *models.ReqContext, cmd models.TrimDashboa
meta := cmd.Meta
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)
}
trimedResult, err = hs.LoadSchemaService.DashboardTrimDefaults(*dash)
if err != nil {
return response.Error(500, "Error while trim default value from dashboard json", err)
}
dto := dtos.TrimDashboardFullWithMeta{
@ -279,13 +277,6 @@ func (hs *HTTPServer) PostDashboard(c *models.ReqContext, cmd models.SaveDashboa
var err error
cmd.OrgId = c.OrgId
cmd.UserId = c.UserId
trimDefaults := c.QueryBoolWithDefault("trimdefaults", false)
if trimDefaults && !hs.LoadSchemaService.IsDisabled() {
cmd.Dashboard, err = hs.LoadSchemaService.DashboardApplyDefaults(cmd.Dashboard)
if err != nil {
return response.Error(500, "Error while applying default value to the dashboard json", err)
}
}
if cmd.FolderUid != "" {
folders := dashboards.NewFolderService(c.OrgId, c.SignedInUser, hs.SQLStore)
folder, err := folders.GetFolderByUID(cmd.FolderUid)

View File

@ -213,7 +213,7 @@ func (hs *HTTPServer) ImportDashboard(c *models.ReqContext, apiCmd dtos.ImportDa
}
trimDefaults := c.QueryBoolWithDefault("trimdefaults", true)
if trimDefaults && !hs.LoadSchemaService.IsDisabled() {
if trimDefaults {
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)

View File

@ -50,12 +50,6 @@ 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()

View File

@ -391,11 +391,6 @@ 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"]

View File

@ -7,7 +7,6 @@ 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;
@ -138,11 +137,9 @@ 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 trimed dashboard json">
<Switch value={trimDefaults} onChange={this.onTrimDefaultsChange} />
</Field>
)}
<Field label="Export with default values removed">
<Switch value={trimDefaults} onChange={this.onTrimDefaultsChange} />
</Field>
<Modal.ButtonRow>
<Button variant="secondary" onClick={onDismiss} fill="outline">
Cancel