mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Variables: migrates old tags format for consistency (#24276)
* Variables: migrates old tags format for consistency * Update DashboardGrid.test.tsx.snap * Update DashboardPage.test.tsx.snap * Update DashboardGrid.test.tsx.snap
This commit is contained in:
parent
1ff0d9f612
commit
ed73d06846
@ -78,7 +78,7 @@ exports[`DashboardPage Dashboard init completed Should render dashboard grid 1`
|
||||
],
|
||||
"refresh": undefined,
|
||||
"revision": undefined,
|
||||
"schemaVersion": 24,
|
||||
"schemaVersion": 25,
|
||||
"snapshot": undefined,
|
||||
"style": "dark",
|
||||
"tags": Array [],
|
||||
@ -191,7 +191,7 @@ exports[`DashboardPage Dashboard init completed Should render dashboard grid 1`
|
||||
],
|
||||
"refresh": undefined,
|
||||
"revision": undefined,
|
||||
"schemaVersion": 24,
|
||||
"schemaVersion": 25,
|
||||
"snapshot": undefined,
|
||||
"style": "dark",
|
||||
"tags": Array [],
|
||||
@ -285,7 +285,7 @@ exports[`DashboardPage Dashboard init completed Should render dashboard grid 1`
|
||||
],
|
||||
"refresh": undefined,
|
||||
"revision": undefined,
|
||||
"schemaVersion": 24,
|
||||
"schemaVersion": 25,
|
||||
"snapshot": undefined,
|
||||
"style": "dark",
|
||||
"tags": Array [],
|
||||
@ -410,7 +410,7 @@ exports[`DashboardPage When dashboard has editview url state should render setti
|
||||
],
|
||||
"refresh": undefined,
|
||||
"revision": undefined,
|
||||
"schemaVersion": 24,
|
||||
"schemaVersion": 25,
|
||||
"snapshot": undefined,
|
||||
"style": "dark",
|
||||
"tags": Array [],
|
||||
@ -523,7 +523,7 @@ exports[`DashboardPage When dashboard has editview url state should render setti
|
||||
],
|
||||
"refresh": undefined,
|
||||
"revision": undefined,
|
||||
"schemaVersion": 24,
|
||||
"schemaVersion": 25,
|
||||
"snapshot": undefined,
|
||||
"style": "dark",
|
||||
"tags": Array [],
|
||||
@ -617,7 +617,7 @@ exports[`DashboardPage When dashboard has editview url state should render setti
|
||||
],
|
||||
"refresh": undefined,
|
||||
"revision": undefined,
|
||||
"schemaVersion": 24,
|
||||
"schemaVersion": 25,
|
||||
"snapshot": undefined,
|
||||
"style": "dark",
|
||||
"tags": Array [],
|
||||
@ -717,7 +717,7 @@ exports[`DashboardPage When dashboard has editview url state should render setti
|
||||
],
|
||||
"refresh": undefined,
|
||||
"revision": undefined,
|
||||
"schemaVersion": 24,
|
||||
"schemaVersion": 25,
|
||||
"snapshot": undefined,
|
||||
"style": "dark",
|
||||
"tags": Array [],
|
||||
|
@ -235,7 +235,7 @@ exports[`DashboardGrid Can render dashboard grid Should render 1`] = `
|
||||
],
|
||||
"refresh": undefined,
|
||||
"revision": undefined,
|
||||
"schemaVersion": 24,
|
||||
"schemaVersion": 25,
|
||||
"snapshot": undefined,
|
||||
"style": "dark",
|
||||
"tags": Array [],
|
||||
@ -477,7 +477,7 @@ exports[`DashboardGrid Can render dashboard grid Should render 1`] = `
|
||||
],
|
||||
"refresh": undefined,
|
||||
"revision": undefined,
|
||||
"schemaVersion": 24,
|
||||
"schemaVersion": 25,
|
||||
"snapshot": undefined,
|
||||
"style": "dark",
|
||||
"tags": Array [],
|
||||
@ -719,7 +719,7 @@ exports[`DashboardGrid Can render dashboard grid Should render 1`] = `
|
||||
],
|
||||
"refresh": undefined,
|
||||
"revision": undefined,
|
||||
"schemaVersion": 24,
|
||||
"schemaVersion": 25,
|
||||
"snapshot": undefined,
|
||||
"style": "dark",
|
||||
"tags": Array [],
|
||||
@ -961,7 +961,7 @@ exports[`DashboardGrid Can render dashboard grid Should render 1`] = `
|
||||
],
|
||||
"refresh": undefined,
|
||||
"revision": undefined,
|
||||
"schemaVersion": 24,
|
||||
"schemaVersion": 25,
|
||||
"snapshot": undefined,
|
||||
"style": "dark",
|
||||
"tags": Array [],
|
||||
|
@ -132,7 +132,7 @@ describe('DashboardModel', () => {
|
||||
});
|
||||
|
||||
it('dashboard schema version should be set to latest', () => {
|
||||
expect(model.schemaVersion).toBe(24);
|
||||
expect(model.schemaVersion).toBe(25);
|
||||
});
|
||||
|
||||
it('graph thresholds should be migrated', () => {
|
||||
@ -626,6 +626,95 @@ describe('DashboardModel', () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('when migrating variables with old tags format', () => {
|
||||
let model: DashboardModel;
|
||||
|
||||
beforeEach(() => {
|
||||
model = new DashboardModel({
|
||||
templating: {
|
||||
list: [
|
||||
{
|
||||
type: 'query',
|
||||
tags: ['Africa', 'America', 'Asia', 'Europe'],
|
||||
},
|
||||
{
|
||||
type: 'query',
|
||||
current: {
|
||||
tags: [
|
||||
{
|
||||
selected: true,
|
||||
text: 'America',
|
||||
values: ['server-us-east', 'server-us-central', 'server-us-west'],
|
||||
valuesText: 'server-us-east + server-us-central + server-us-west',
|
||||
},
|
||||
{
|
||||
selected: true,
|
||||
text: 'Europe',
|
||||
values: ['server-eu-east', 'server-eu-west'],
|
||||
valuesText: 'server-eu-east + server-eu-west',
|
||||
},
|
||||
],
|
||||
text: 'server-us-east + server-us-central + server-us-west + server-eu-east + server-eu-west',
|
||||
value: ['server-us-east', 'server-us-central', 'server-us-west', 'server-eu-east', 'server-eu-west'],
|
||||
},
|
||||
tags: ['Africa', 'America', 'Asia', 'Europe'],
|
||||
},
|
||||
{
|
||||
type: 'query',
|
||||
tags: [
|
||||
{ text: 'Africa', selected: false },
|
||||
{ text: 'America', selected: true },
|
||||
{ text: 'Asia', selected: false },
|
||||
{ text: 'Europe', selected: false },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
it('should have three variables after migration', () => {
|
||||
expect(model.templating.list.length).toBe(3);
|
||||
});
|
||||
|
||||
it('should be migrated with defaults if being out of sync', () => {
|
||||
expect(model.templating.list[0].tags).toEqual([
|
||||
{ text: 'Africa', selected: false },
|
||||
{ text: 'America', selected: false },
|
||||
{ text: 'Asia', selected: false },
|
||||
{ text: 'Europe', selected: false },
|
||||
]);
|
||||
});
|
||||
|
||||
it('should be migrated with current values if being out of sync', () => {
|
||||
expect(model.templating.list[1].tags).toEqual([
|
||||
{ text: 'Africa', selected: false },
|
||||
{
|
||||
text: 'America',
|
||||
selected: true,
|
||||
values: ['server-us-east', 'server-us-central', 'server-us-west'],
|
||||
valuesText: 'server-us-east + server-us-central + server-us-west',
|
||||
},
|
||||
{ text: 'Asia', selected: false },
|
||||
{
|
||||
text: 'Europe',
|
||||
selected: true,
|
||||
values: ['server-eu-east', 'server-eu-west'],
|
||||
valuesText: 'server-eu-east + server-eu-west',
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
it('should not be migrated if being in sync', () => {
|
||||
expect(model.templating.list[2].tags).toEqual([
|
||||
{ text: 'Africa', selected: false },
|
||||
{ text: 'America', selected: true },
|
||||
{ text: 'Asia', selected: false },
|
||||
{ text: 'Europe', selected: false },
|
||||
]);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function createRow(options: any, panelDescriptions: any[]) {
|
||||
|
@ -6,7 +6,7 @@ import kbn from 'app/core/utils/kbn';
|
||||
// Types
|
||||
import { PanelModel } from './PanelModel';
|
||||
import { DashboardModel } from './DashboardModel';
|
||||
import { DataLink, urlUtil, DataLinkBuiltInVars } from '@grafana/data';
|
||||
import { DataLink, DataLinkBuiltInVars, urlUtil } from '@grafana/data';
|
||||
// Constants
|
||||
import {
|
||||
DEFAULT_PANEL_SPAN,
|
||||
@ -16,8 +16,9 @@ import {
|
||||
GRID_COLUMN_COUNT,
|
||||
MIN_PANEL_HEIGHT,
|
||||
} from 'app/core/constants';
|
||||
import { isMulti } from 'app/features/variables/guard';
|
||||
import { isMulti, isQuery } from 'app/features/variables/guard';
|
||||
import { alignCurrentWithMulti } from 'app/features/variables/shared/multiOptions';
|
||||
import { VariableTag } from '../../templating/types';
|
||||
|
||||
export class DashboardMigrator {
|
||||
dashboard: DashboardModel;
|
||||
@ -30,7 +31,7 @@ export class DashboardMigrator {
|
||||
let i, j, k, n;
|
||||
const oldVersion = this.dashboard.schemaVersion;
|
||||
const panelUpgrades = [];
|
||||
this.dashboard.schemaVersion = 24;
|
||||
this.dashboard.schemaVersion = 25;
|
||||
|
||||
if (oldVersion === this.dashboard.schemaVersion) {
|
||||
return;
|
||||
@ -522,6 +523,47 @@ export class DashboardMigrator {
|
||||
});
|
||||
}
|
||||
|
||||
if (oldVersion < 25) {
|
||||
for (const variable of this.dashboard.templating.list) {
|
||||
if (!isQuery(variable)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const { tags, current } = variable;
|
||||
if (!Array.isArray(tags)) {
|
||||
variable.tags = [];
|
||||
continue;
|
||||
}
|
||||
|
||||
const currentTags = current?.tags ?? [];
|
||||
const currents = currentTags.reduce((all, tag) => {
|
||||
if (tag && tag.hasOwnProperty('text') && typeof tag['text'] === 'string') {
|
||||
all[tag.text] = tag;
|
||||
}
|
||||
return all;
|
||||
}, {} as Record<string, VariableTag>);
|
||||
|
||||
const newTags: VariableTag[] = [];
|
||||
|
||||
for (const tag of tags) {
|
||||
if (typeof tag === 'object') {
|
||||
// new format let's assume it's correct
|
||||
newTags.push(tag);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (typeof tag !== 'string') {
|
||||
// something that we do not support
|
||||
continue;
|
||||
}
|
||||
|
||||
const currentValue = currents[tag];
|
||||
newTags.push({ text: tag, selected: false, ...currentValue });
|
||||
}
|
||||
variable.tags = newTags;
|
||||
}
|
||||
}
|
||||
|
||||
if (panelUpgrades.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user