From 03ca9c7c66d219b521f6440080ea2272d5770f8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Jamr=C3=B3z?= Date: Mon, 30 Oct 2023 13:40:44 +0100 Subject: [PATCH] Explore: Ensure logs volume data points are in order (#77268) * Ensure logs volume data points are ordered * Add a test for data points order --- public/app/features/logs/utils.test.ts | 27 ++++++++++++++++++++++++++ public/app/features/logs/utils.ts | 13 +++++++------ 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/public/app/features/logs/utils.test.ts b/public/app/features/logs/utils.test.ts index 6e745ef63e7..ed58cfa8c04 100644 --- a/public/app/features/logs/utils.test.ts +++ b/public/app/features/logs/utils.test.ts @@ -407,6 +407,33 @@ describe('mergeLogsVolumeDataFrames', () => { ]); expect(maximum).toBe(6); }); + + it('produces merged results order by time', () => { + const frame1 = mockLogVolume('info', [1600000000001, 1600000000009], [1, 1]); + const frame2 = mockLogVolume('info', [1600000000000, 1600000000005], [1, 1]); + + const { dataFrames: merged } = mergeLogsVolumeDataFrames([frame1, frame2]); + + expect(merged).toMatchObject([ + { + fields: [ + { + name: 'Time', + type: FieldType.time, + values: [1600000000000, 1600000000001, 1600000000005, 1600000000009], + }, + { + name: 'Value', + type: FieldType.number, + values: [1, 1, 1, 1], + config: { + displayNameFromDS: 'info', + }, + }, + ], + }, + ]); + }); }); describe('getLogsVolumeDimensions', () => { diff --git a/public/app/features/logs/utils.ts b/public/app/features/logs/utils.ts index d0430dd209e..9ac25e2cf6e 100644 --- a/public/app/features/logs/utils.ts +++ b/public/app/features/logs/utils.ts @@ -243,13 +243,14 @@ export const mergeLogsVolumeDataFrames = (dataFrames: DataFrame[]): { dataFrames levelDataFrame.addField({ name: 'Time', type: FieldType.time, config: timeFieldConfig }); levelDataFrame.addField({ name: 'Value', type: FieldType.number, config: valueFieldConfig }); - for (const time in aggregated[level]) { - const value = aggregated[level][time]; - levelDataFrame.add({ - Time: Number(time), - Value: value, + Object.entries(aggregated[level]) + .sort((a, b) => Number(a[0]) - Number(b[0])) + .forEach(([time, value]) => { + levelDataFrame.add({ + Time: Number(time), + Value: value, + }); }); - } results.push(levelDataFrame); });