Handle old dashboards with transformation filters

This commit is contained in:
Kristina Durivage
2025-09-24 16:29:42 -05:00
parent 0c25bc2b27
commit 705646c8f9
9 changed files with 48 additions and 10 deletions
+2 -1
View File
@@ -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('-')}`;
};
@@ -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({