From 59bea141f2446daba568a2f99ccd5e7f1fe01ff1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Fri, 24 Apr 2020 10:11:14 +0200 Subject: [PATCH] Transformations: Simple fix for labels to fields problem with time series field names (#23828) * Simple fix for labels to fields transform problem * Added unit test --- .../transformers/labelsToFields.test.ts | 32 +++++++++++++ .../transformers/labelsToFields.ts | 46 ++++++++++++++++++- ...sx => LabelsToFieldsTransformerEditor.tsx} | 6 +-- .../src/utils/standardTransformers.ts | 4 +- 4 files changed, 81 insertions(+), 7 deletions(-) rename packages/grafana-ui/src/components/TransformersUI/{LabelsAsFieldsTransformerEditor.tsx => LabelsToFieldsTransformerEditor.tsx} (78%) diff --git a/packages/grafana-data/src/transformations/transformers/labelsToFields.test.ts b/packages/grafana-data/src/transformations/transformers/labelsToFields.test.ts index 264997c79d6..7f6dc93c237 100644 --- a/packages/grafana-data/src/transformations/transformers/labelsToFields.test.ts +++ b/packages/grafana-data/src/transformations/transformers/labelsToFields.test.ts @@ -43,6 +43,38 @@ describe('Labels as Columns', () => { expect(result[0].fields).toEqual(expected); }); + it('data frames where frame name is same as value field name replace field name with name Value', () => { + const cfg: DataTransformerConfig = { + id: DataTransformerID.labelsToFields, + options: {}, + }; + + const oneValueOneLabelA = toDataFrame({ + name: 'A', + fields: [ + { name: 'time', type: FieldType.time, values: [1000] }, + { name: 'A', type: FieldType.number, values: [1], labels: { location: 'inside' } }, + ], + }); + + const oneValueOneLabelB = toDataFrame({ + name: 'B', + fields: [ + { name: 'time', type: FieldType.time, values: [2000] }, + { name: 'B', type: FieldType.number, values: [-1], labels: { location: 'outside' } }, + ], + }); + + const result = transformDataFrame([cfg], [oneValueOneLabelA, oneValueOneLabelB]); + const expected: Field[] = [ + { name: 'time', type: FieldType.time, values: new ArrayVector([1000, 2000]), config: {} }, + { name: 'location', type: FieldType.string, values: new ArrayVector(['inside', 'outside']), config: {} }, + { name: 'Value', type: FieldType.number, values: new ArrayVector([1, -1]), config: {} }, + ]; + + expect(result[0].fields).toEqual(expected); + }); + it('data frame with 2 values and 1 label', () => { const cfg: DataTransformerConfig = { id: DataTransformerID.labelsToFields, diff --git a/packages/grafana-data/src/transformations/transformers/labelsToFields.ts b/packages/grafana-data/src/transformations/transformers/labelsToFields.ts index 5693d998b75..b96df90a623 100644 --- a/packages/grafana-data/src/transformations/transformers/labelsToFields.ts +++ b/packages/grafana-data/src/transformations/transformers/labelsToFields.ts @@ -1,4 +1,4 @@ -import { DataFrame, DataTransformerInfo, FieldType } from '../../types'; +import { DataFrame, DataTransformerInfo, FieldType, Field } from '../../types'; import { DataTransformerID } from './ids'; import { MutableDataFrame } from '../../dataframe'; import { ArrayVector } from '../../vector'; @@ -21,7 +21,8 @@ export const labelsToFieldsTransformer: DataTransformerInfo = { +export const labelsToFieldsTransformerRegistryItem: TransformerRegistyItem = { id: DataTransformerID.labelsToFields, editor: LabelsAsFieldsTransformerEditor, transformation: standardTransformers.labelsToFieldsTransformer, - name: 'Labels as fields', - description: 'Groups series by time and return labels as fields', + name: 'Labels to fields', + description: 'Groups series by time and return labels or tags as fields', }; diff --git a/packages/grafana-ui/src/utils/standardTransformers.ts b/packages/grafana-ui/src/utils/standardTransformers.ts index 47b98cdf60c..0c682873458 100644 --- a/packages/grafana-ui/src/utils/standardTransformers.ts +++ b/packages/grafana-ui/src/utils/standardTransformers.ts @@ -5,7 +5,7 @@ import { filterFramesByRefIdTransformRegistryItem } from '../components/Transfor import { organizeFieldsTransformRegistryItem } from '../components/TransformersUI/OrganizeFieldsTransformerEditor'; import { seriesToFieldsTransformerRegistryItem } from '../components/TransformersUI/SeriesToFieldsTransformerEditor'; import { calculateFieldTransformRegistryItem } from '../components/TransformersUI/CalculateFieldTransformerEditor'; -import { labelsAsFieldsTransformerRegistryItem } from '../components/TransformersUI/LabelsAsFieldsTransformerEditor'; +import { labelsToFieldsTransformerRegistryItem } from '../components/TransformersUI/LabelsToFieldsTransformerEditor'; export const getStandardTransformers = (): Array> => { return [ @@ -15,6 +15,6 @@ export const getStandardTransformers = (): Array> => organizeFieldsTransformRegistryItem, seriesToFieldsTransformerRegistryItem, calculateFieldTransformRegistryItem, - labelsAsFieldsTransformerRegistryItem, + labelsToFieldsTransformerRegistryItem, ]; };