mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* migrate metric queries * restructure migrations * self review * cleanup tests * ensure alias is not changed * apply pr feedback
102 lines
3.8 KiB
TypeScript
102 lines
3.8 KiB
TypeScript
import { config } from '@grafana/runtime';
|
|
|
|
import { CloudWatchMetricsQuery } from '../types';
|
|
|
|
import { migrateAliasPatterns } from './metricQueryMigrations';
|
|
|
|
describe('metricQueryMigrations', () => {
|
|
interface TestScenario {
|
|
description?: string;
|
|
alias: string;
|
|
label?: string;
|
|
}
|
|
|
|
describe('migrateAliasPatterns', () => {
|
|
const baseQuery: CloudWatchMetricsQuery = {
|
|
statistic: 'Average',
|
|
refId: 'A',
|
|
id: '',
|
|
region: 'us-east-2',
|
|
namespace: 'AWS/EC2',
|
|
period: '300',
|
|
alias: '',
|
|
metricName: 'CPUUtilization',
|
|
dimensions: {},
|
|
matchExact: false,
|
|
expression: '',
|
|
};
|
|
describe('when feature is enabled', () => {
|
|
describe('and label was not previously migrated', () => {
|
|
const cases: TestScenario[] = [
|
|
{ description: 'Metric name', alias: '{{metric}}', label: "${PROP('MetricName')}" },
|
|
{ description: 'Trim pattern', alias: '{{ metric }}', label: "${PROP('MetricName')}" },
|
|
{ description: 'Namespace', alias: '{{namespace}}', label: "${PROP('Namespace')}" },
|
|
{ description: 'Period', alias: '{{period}}', label: "${PROP('Period')}" },
|
|
{ description: 'Region', alias: '{{region}}', label: "${PROP('Region')}" },
|
|
{ description: 'Statistic', alias: '{{stat}}', label: "${PROP('Stat')}" },
|
|
{ description: 'Label', alias: '{{label}}', label: '${LABEL}' },
|
|
{
|
|
description: 'Non-existing alias pattern',
|
|
alias: '{{anything_else}}',
|
|
label: "${PROP('Dim.anything_else')}",
|
|
},
|
|
{
|
|
description: 'Combined patterns',
|
|
alias: 'some {{combination}} of {{label}} and {{metric}}',
|
|
label: "some ${PROP('Dim.combination')} of ${LABEL} and ${PROP('MetricName')}",
|
|
},
|
|
{
|
|
description: 'Combined patterns not trimmed',
|
|
alias: 'some {{combination }}{{ label}} and {{metric}}',
|
|
label: "some ${PROP('Dim.combination')}${LABEL} and ${PROP('MetricName')}",
|
|
},
|
|
];
|
|
test.each(cases)('given old alias %p, it should be migrated to label: %p', ({ alias, label }) => {
|
|
config.featureToggles.cloudWatchDynamicLabels = true;
|
|
const testQuery = { ...baseQuery, alias };
|
|
const result = migrateAliasPatterns(testQuery);
|
|
expect(result.label).toBe(label);
|
|
expect(result.alias).toBe(alias);
|
|
});
|
|
});
|
|
|
|
describe('and label was previously migrated', () => {
|
|
const cases: TestScenario[] = [
|
|
{
|
|
alias: '',
|
|
label: "${PROP('MetricName')}",
|
|
},
|
|
{ alias: '{{metric}}', label: "${PROP('Period')}" },
|
|
{ alias: '{{namespace}}', label: '' },
|
|
];
|
|
test.each(cases)('it should not be migrated once again', ({ alias, label }) => {
|
|
config.featureToggles.cloudWatchDynamicLabels = true;
|
|
const testQuery = { ...baseQuery, alias, label };
|
|
const result = migrateAliasPatterns(testQuery);
|
|
expect(result.label).toBe(label);
|
|
expect(result.alias).toBe(alias);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('when feature is disabled', () => {
|
|
const cases: TestScenario[] = [
|
|
{ alias: '{{period}}', label: "${PROP('MetricName')}" },
|
|
{ alias: '{{metric}}', label: '' },
|
|
{ alias: '', label: "${PROP('MetricName')}" },
|
|
{ alias: '', label: undefined },
|
|
];
|
|
test.each(cases)('should not migrate alias', ({ alias, label }) => {
|
|
config.featureToggles.cloudWatchDynamicLabels = false;
|
|
const testQuery = { ...baseQuery, alias: `${alias}` };
|
|
if (label !== undefined) {
|
|
testQuery.label = label;
|
|
}
|
|
const result = migrateAliasPatterns(testQuery);
|
|
expect(result.label).toBe(label);
|
|
expect(result.alias).toBe(alias);
|
|
});
|
|
});
|
|
});
|
|
});
|