diff --git a/src/datasource/responseHandler.spec.ts b/src/datasource/responseHandler.spec.ts new file mode 100644 index 0000000..64f2d8f --- /dev/null +++ b/src/datasource/responseHandler.spec.ts @@ -0,0 +1,28 @@ +import { FieldType, MutableDataFrame, TIME_SERIES_TIME_FIELD_NAME } from '@grafana/data'; +import { convertToWide } from './responseHandler'; + +describe('convertToWide', () => { + it('merge multiple SLI frames correctly', () => { + let frames = convertToWide([ + new MutableDataFrame({ + name: 'SLI', + fields: [ + { name: TIME_SERIES_TIME_FIELD_NAME, values: [1], type: FieldType.time }, + { name: TIME_SERIES_TIME_FIELD_NAME, values: [1.1], type: FieldType.number }, + ], + }), + new MutableDataFrame({ + name: 'SLI', + fields: [ + { name: TIME_SERIES_TIME_FIELD_NAME, values: [1], type: FieldType.time }, + { name: TIME_SERIES_TIME_FIELD_NAME, values: [1.2], type: FieldType.number }, + ], + }), + ]); + expect(frames.length).toStrictEqual(1); + expect(frames[0].fields.length).toStrictEqual(3); + expect(frames[0].fields[0].values.at(0)).toStrictEqual(1); + expect(frames[0].fields[1].values.at(0)).toStrictEqual(1.1); + expect(frames[0].fields[2].values.at(0)).toStrictEqual(1.2); + }); +}); diff --git a/src/datasource/responseHandler.ts b/src/datasource/responseHandler.ts index d8d0ce8..61bcdb6 100644 --- a/src/datasource/responseHandler.ts +++ b/src/datasource/responseHandler.ts @@ -377,7 +377,10 @@ export function convertToWide(data: MutableDataFrame[]): DataFrame[] { const fields: MutableField[] = [timeField]; for (let i = 0; i < data.length; i++) { - const valueField = data[i].fields.find((f) => f.name === TIME_SERIES_VALUE_FIELD_NAME); + let valueField = data[i].fields.find((f) => f.name === TIME_SERIES_VALUE_FIELD_NAME); + if (data[i].name === 'SLI') { + valueField = data[i].fields.find((f) => f.type === FieldType.number); + } if (!valueField) { continue; }