From c4a4843de649d7481c9c7687be341255ad1100c9 Mon Sep 17 00:00:00 2001 From: "grafana-delivery-bot[bot]" <132647405+grafana-delivery-bot[bot]@users.noreply.github.com> Date: Mon, 10 Jun 2024 10:41:09 -0500 Subject: [PATCH] [v11.0.x] Transformations: Keep original `field.labels.name` when joining frames (#88982) Transformations: Keep original `field.labels.name` when joining frames (#88873) (cherry picked from commit 89a0bec2086ff93c0f0715007980ea65ed2d0951) Co-authored-by: Leon Sorokin --- .../transformers/joinDataFrames.test.ts | 32 +++++++++++++++++++ .../transformers/joinDataFrames.ts | 5 +-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/packages/grafana-data/src/transformations/transformers/joinDataFrames.test.ts b/packages/grafana-data/src/transformations/transformers/joinDataFrames.test.ts index 137062a2503..e5002cc6a97 100644 --- a/packages/grafana-data/src/transformations/transformers/joinDataFrames.test.ts +++ b/packages/grafana-data/src/transformations/transformers/joinDataFrames.test.ts @@ -412,6 +412,38 @@ describe('align frames', () => { `); }); + it('add frame.name as field.labels.name only when field.labels.name does not exist', () => { + const series1 = toDataFrame({ + name: 'Frame A', + fields: [ + { name: 'Time', type: FieldType.time, values: [1000, 2000] }, + { name: 'Metric 1', type: FieldType.number, values: [1, 100], labels: { name: 'bar' } }, + ], + }); + + const series2 = toDataFrame({ + name: 'Frame B', + fields: [ + { name: 'Time', type: FieldType.time, values: [1000] }, + { name: 'Metric 2', type: FieldType.number, values: [150] }, + ], + }); + + const series3 = toDataFrame({ + name: 'Frame C', + fields: [ + { name: 'Time', type: FieldType.time, values: [1000] }, + { name: 'Value', type: FieldType.number, values: [150] }, // weird that in this "Value" case it doesnt get moved into field.labels.name + ], + }); + + const out = joinDataFrames({ frames: [series1, series2, series3] })!; + + expect(out.fields[1].labels).toEqual({ name: 'bar' }); + expect(out.fields[2].labels).toEqual({ name: 'Frame B' }); + expect(out.fields[3].labels).toEqual({}); + }); + it('supports duplicate times', () => { //---------- // NOTE!!! diff --git a/packages/grafana-data/src/transformations/transformers/joinDataFrames.ts b/packages/grafana-data/src/transformations/transformers/joinDataFrames.ts index 0b994b79402..ae8f06d1e3b 100644 --- a/packages/grafana-data/src/transformations/transformers/joinDataFrames.ts +++ b/packages/grafana-data/src/transformations/transformers/joinDataFrames.ts @@ -205,7 +205,8 @@ export function joinDataFrames(options: JoinOptions): DataFrame | undefined { if (frame.name) { if (field.name === TIME_SERIES_VALUE_FIELD_NAME) { name = frame.name; - } else { + } else if (labels.name == null) { + // add the name label from frame labels = { ...labels, name: frame.name }; } } @@ -213,7 +214,7 @@ export function joinDataFrames(options: JoinOptions): DataFrame | undefined { fields.push({ ...field, name, - labels, // add the name label from frame + labels, }); }