Handle old dashboards with transformation filters
This commit is contained in:
@@ -268,6 +268,7 @@ export { fuzzySearch } from './utils/fuzzySearch';
|
||||
|
||||
// Transformations
|
||||
export { standardTransformers } from './transformations/transformers';
|
||||
export { getTransformationLegacyRefId } from './transformations/transformers/utils';
|
||||
export {
|
||||
fieldMatchers,
|
||||
frameMatchers,
|
||||
@@ -277,7 +278,7 @@ export {
|
||||
getValueMatcher,
|
||||
} from './transformations/matchers';
|
||||
export { type FieldValueMatcherConfig } from './transformations/matchers/fieldValueMatcher';
|
||||
export { DataTransformerID } from './transformations/transformers/ids';
|
||||
export { DataTransformerID, refIDDependentIDs } from './transformations/transformers/ids';
|
||||
export { MatcherID, FieldMatcherID, FrameMatcherID, ValueMatcherID } from './transformations/matchers/ids';
|
||||
export {
|
||||
ReducerID,
|
||||
|
||||
@@ -44,3 +44,11 @@ export enum DataTransformerID {
|
||||
regression = 'regression',
|
||||
groupToNestedTable = 'groupToNestedTable',
|
||||
}
|
||||
|
||||
export const refIDDependentIDs = [
|
||||
DataTransformerID.joinByField,
|
||||
DataTransformerID.merge,
|
||||
DataTransformerID.reduce,
|
||||
DataTransformerID.seriesToRows,
|
||||
DataTransformerID.joinByLabels,
|
||||
];
|
||||
|
||||
@@ -7,6 +7,7 @@ import { FieldMatcherID } from '../matchers/ids';
|
||||
|
||||
import { DataTransformerID } from './ids';
|
||||
import { joinDataFrames } from './joinDataFrames';
|
||||
import { getTransformationLegacyRefId } from './utils';
|
||||
|
||||
export enum JoinMode {
|
||||
outer = 'outer', // best for time series, non duplicated join on values
|
||||
@@ -43,8 +44,7 @@ export const joinByFieldTransformer: SynchronousDataTransformerInfo<JoinByFieldO
|
||||
}
|
||||
const joined = joinDataFrames({ frames: data, joinBy, mode: options.mode });
|
||||
if (joined) {
|
||||
joined.refId =
|
||||
options.refId ?? `${DataTransformerID.joinByField}-${data.map((frame) => frame.refId).join('-')}`;
|
||||
joined.refId = options.refId ?? getTransformationLegacyRefId(DataTransformerID.joinByField, data);
|
||||
return [joined];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import { DataFrame, Field } from '../../types/dataFrame';
|
||||
import { DataTransformerInfo, TransformationApplicabilityLevels } from '../../types/transformations';
|
||||
|
||||
import { DataTransformerID } from './ids';
|
||||
import { getTransformationLegacyRefId } from './utils';
|
||||
|
||||
interface ValuePointer {
|
||||
key: string;
|
||||
@@ -46,7 +47,7 @@ export const mergeTransformer: DataTransformerInfo<MergeTransformerOptions> = {
|
||||
const fieldIndexByName: Record<string, Record<number, number>> = {};
|
||||
const fieldNamesForKey: string[] = [];
|
||||
const dataFrame = new MutableDataFrame({
|
||||
refId: options.refId ?? `${DataTransformerID.merge}-${data.map((frame) => frame.refId).join('-')}`,
|
||||
refId: options.refId ?? getTransformationLegacyRefId(DataTransformerID.merge, data),
|
||||
fields: [],
|
||||
});
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ import { getFieldMatcher } from '../matchers';
|
||||
import { alwaysFieldMatcher, notTimeFieldMatcher } from '../matchers/predicates';
|
||||
|
||||
import { DataTransformerID } from './ids';
|
||||
import { getTransformationLegacyRefId } from './utils';
|
||||
|
||||
export enum ReduceTransformerMode {
|
||||
SeriesToRows = 'seriesToRows', // default
|
||||
@@ -61,7 +62,7 @@ export const reduceTransformer: DataTransformerInfo<ReduceTransformerOptions> =
|
||||
? [
|
||||
{
|
||||
...res,
|
||||
refId: options.refId ?? `${DataTransformerID.reduce}-${data.map((frame) => frame.refId).join('-')}`,
|
||||
refId: options.refId ?? getTransformationLegacyRefId(DataTransformerID.reduce, data),
|
||||
},
|
||||
]
|
||||
: [];
|
||||
|
||||
@@ -15,6 +15,7 @@ import {
|
||||
import { DataTransformerInfo } from '../../types/transformations';
|
||||
|
||||
import { DataTransformerID } from './ids';
|
||||
import { getTransformationLegacyRefId } from './utils';
|
||||
|
||||
export interface SeriesToRowsTransformerOptions {
|
||||
refId?: string;
|
||||
@@ -40,7 +41,7 @@ export const seriesToRowsTransformer: DataTransformerInfo<SeriesToRowsTransforme
|
||||
const timeFieldByIndex: Record<number, number> = {};
|
||||
const targetFields = new Set<string>();
|
||||
const dataFrame = new MutableDataFrame({
|
||||
refId: options.refId ?? `${DataTransformerID.seriesToRows}-${data.map((frame) => frame.refId).join('-')}`,
|
||||
refId: options.refId ?? getTransformationLegacyRefId(DataTransformerID.seriesToRows, data),
|
||||
fields: [],
|
||||
});
|
||||
const metricField: Field = {
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import { DataFrame } from '../../types/dataFrame';
|
||||
import { SpecialValue } from '../../types/transformations';
|
||||
|
||||
import { DataTransformerID } from './ids';
|
||||
|
||||
/**
|
||||
* Retrieve the maximum number of fields in a series of a dataframe.
|
||||
*/
|
||||
@@ -33,3 +35,7 @@ export function getSpecialValue(specialValue: SpecialValue) {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
export const getTransformationLegacyRefId = (transformationId: DataTransformerID, data: DataFrame[]) => {
|
||||
return `${transformationId}-${data.map((frame) => frame.refId).join('-')}`;
|
||||
};
|
||||
|
||||
+15
-2
@@ -2,7 +2,15 @@ import { css } from '@emotion/css';
|
||||
import { DragDropContext, DropResult, Droppable } from '@hello-pangea/dnd';
|
||||
import { useState } from 'react';
|
||||
|
||||
import { DataTransformerConfig, getNextRefId, GrafanaTheme2, PanelData } from '@grafana/data';
|
||||
import {
|
||||
DataTransformerConfig,
|
||||
DataTransformerID,
|
||||
getTransformationLegacyRefId,
|
||||
getNextRefId,
|
||||
GrafanaTheme2,
|
||||
PanelData,
|
||||
refIDDependentIDs,
|
||||
} from '@grafana/data';
|
||||
import { selectors } from '@grafana/e2e-selectors';
|
||||
import { Trans, t } from '@grafana/i18n';
|
||||
import {
|
||||
@@ -179,7 +187,12 @@ function TransformationsEditor({ transformations, model, data }: TransformationE
|
||||
// populate refIds for any transformations that don't have them
|
||||
const refLessTransformations = transformations.filter((transformation) => transformation.refId === undefined);
|
||||
refLessTransformations.forEach((transformation) => {
|
||||
transformation.refId = getNextRefId(transformations, 'T-');
|
||||
const transformationId: DataTransformerID = transformation.id as DataTransformerID;
|
||||
if (refIDDependentIDs.includes(transformationId)) {
|
||||
transformation.refId = getTransformationLegacyRefId(transformationId, data.series);
|
||||
} else {
|
||||
transformation.refId = getNextRefId(transformations, 'T-');
|
||||
}
|
||||
});
|
||||
|
||||
return (
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
import { map } from 'rxjs/operators';
|
||||
|
||||
import { DataFrame, DataTransformerID, Field, FieldType, SynchronousDataTransformerInfo } from '@grafana/data';
|
||||
import {
|
||||
DataFrame,
|
||||
DataTransformerID,
|
||||
Field,
|
||||
FieldType,
|
||||
getTransformationLegacyRefId,
|
||||
SynchronousDataTransformerInfo,
|
||||
} from '@grafana/data';
|
||||
import { t } from '@grafana/i18n';
|
||||
|
||||
import { getDistinctLabels } from '../utils';
|
||||
@@ -112,7 +119,7 @@ export function joinByLabels(options: JoinByLabelsTransformOptions, data: DataFr
|
||||
const frame: DataFrame = {
|
||||
fields: [],
|
||||
length: nameValues[0].length,
|
||||
refId: options.refId ?? `${DataTransformerID.joinByLabels}-${data.map((frame) => frame.refId).join('-')}`,
|
||||
refId: options.refId ?? getTransformationLegacyRefId(DataTransformerID.joinByLabels, data),
|
||||
};
|
||||
for (let i = 0; i < join.length; i++) {
|
||||
frame.fields.push({
|
||||
|
||||
Reference in New Issue
Block a user