From 5749f36f52680a48820e37c3f6a1606de4a10027 Mon Sep 17 00:00:00 2001 From: "grafana-delivery-bot[bot]" <132647405+grafana-delivery-bot[bot]@users.noreply.github.com> Date: Mon, 29 Apr 2024 10:50:34 +0200 Subject: [PATCH] [v11.0.x] Dashboard scenes: Fix min interval not saving (#87022) Dashboard scenes: Fix min interval not saving (#86962) * Fix min interval not saving * Add tests * Fix test (cherry picked from commit fdc102358659385b1643de961a8ed0e2428e682a) Co-authored-by: Oscar Kilhed --- .../transformSaveModelToScene.test.ts | 14 ++++++++++++++ .../transformSceneToSaveModel.test.ts | 7 +++++++ .../serialization/transformSceneToSaveModel.ts | 5 ++++- .../utils/createPanelDataProvider.ts | 1 + 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/public/app/features/dashboard-scene/serialization/transformSaveModelToScene.test.ts b/public/app/features/dashboard-scene/serialization/transformSaveModelToScene.test.ts index 50b58dbe369..d83a1d20114 100644 --- a/public/app/features/dashboard-scene/serialization/transformSaveModelToScene.test.ts +++ b/public/app/features/dashboard-scene/serialization/transformSaveModelToScene.test.ts @@ -417,6 +417,20 @@ describe('transformSaveModelToScene', () => { expect(vizPanel.state.hoverHeader).toEqual(true); }); + it('should initalize the VizPanel with min interval set', () => { + const panel = { + title: '', + type: 'test-plugin', + gridPos: { x: 0, y: 0, w: 12, h: 8 }, + interval: '20m', + }; + + const { vizPanel } = buildGridItemForTest(panel); + + const queryRunner = getQueryRunnerFor(vizPanel); + expect(queryRunner?.state.minInterval).toBe('20m'); + }); + it('should set PanelTimeRange when timeFrom or timeShift is present', () => { const panel = { type: 'test-plugin', diff --git a/public/app/features/dashboard-scene/serialization/transformSceneToSaveModel.test.ts b/public/app/features/dashboard-scene/serialization/transformSceneToSaveModel.test.ts index 6137dfc4a21..57c1d385d7a 100644 --- a/public/app/features/dashboard-scene/serialization/transformSceneToSaveModel.test.ts +++ b/public/app/features/dashboard-scene/serialization/transformSceneToSaveModel.test.ts @@ -259,6 +259,13 @@ describe('transformSceneToSaveModel', () => { expect(saveModel.transparent).toBe(true); }); + it('interval', () => { + const gridItem = buildGridItemFromPanelSchema({ interval: '20m' }); + const saveModel = gridItemToPanel(gridItem); + + expect(saveModel.interval).toBe('20m'); + }); + it('With angular options', () => { const gridItem = buildGridItemFromPanelSchema({}); const vizPanel = gridItem.state.body as VizPanel; diff --git a/public/app/features/dashboard-scene/serialization/transformSceneToSaveModel.ts b/public/app/features/dashboard-scene/serialization/transformSceneToSaveModel.ts index 384aede6ea0..6d918ba78cf 100644 --- a/public/app/features/dashboard-scene/serialization/transformSceneToSaveModel.ts +++ b/public/app/features/dashboard-scene/serialization/transformSceneToSaveModel.ts @@ -281,7 +281,7 @@ function vizPanelDataToPanel( const panel: Pick< Panel, - 'datasource' | 'targets' | 'maxDataPoints' | 'transformations' | 'cacheTimeout' | 'queryCachingTTL' + 'datasource' | 'targets' | 'maxDataPoints' | 'transformations' | 'cacheTimeout' | 'queryCachingTTL' | 'interval' > = {}; const queryRunner = getQueryRunnerFor(vizPanel); @@ -297,6 +297,9 @@ function vizPanelDataToPanel( if (queryRunner.state.queryCachingTTL) { panel.queryCachingTTL = queryRunner.state.queryCachingTTL; } + if (queryRunner.state.minInterval) { + panel.interval = queryRunner.state.minInterval; + } } if (dataProvider instanceof SceneDataTransformer) { diff --git a/public/app/features/dashboard-scene/utils/createPanelDataProvider.ts b/public/app/features/dashboard-scene/utils/createPanelDataProvider.ts index e9754ebf206..758d60be473 100644 --- a/public/app/features/dashboard-scene/utils/createPanelDataProvider.ts +++ b/public/app/features/dashboard-scene/utils/createPanelDataProvider.ts @@ -24,6 +24,7 @@ export function createPanelDataProvider(panel: PanelModel): SceneDataProvider | maxDataPointsFromWidth: true, cacheTimeout: panel.cacheTimeout, queryCachingTTL: panel.queryCachingTTL, + minInterval: panel.interval ?? undefined, dataLayerFilter: { panelId: panel.id, },