From 7bc27a3cfc5b0f4dbde245c0c4e369c8a1dd744e Mon Sep 17 00:00:00 2001 From: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com> Date: Wed, 10 Nov 2021 13:48:38 +0100 Subject: [PATCH] Tempo: Fix validation of float durations (#41400) * Fix parsing of float numbers in validation * Adjust test * Update packages/grafana-data/src/datetime/durationutil.test.ts * Update packages/grafana-data/src/datetime/durationutil.test.ts * Remove us from placeholder --- .../grafana-data/src/datetime/durationutil.test.ts | 10 ++++++++++ packages/grafana-data/src/datetime/durationutil.ts | 2 +- public/app/plugins/datasource/tempo/NativeSearch.tsx | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/grafana-data/src/datetime/durationutil.test.ts b/packages/grafana-data/src/datetime/durationutil.test.ts index e4c86091edd..6f67957bf12 100644 --- a/packages/grafana-data/src/datetime/durationutil.test.ts +++ b/packages/grafana-data/src/datetime/durationutil.test.ts @@ -45,9 +45,19 @@ describe('Duration util', () => { expect(isValidGoDuration(durationString)).toEqual(true); }); + it('valid float number duration string returns true', () => { + const durationString = '3.1h 4.0m 0.1s 2.11ms 0.03us 5.3333ns'; + expect(isValidGoDuration(durationString)).toEqual(true); + }); + it('invalid duration string returns false', () => { const durationString = '3M 6v 5b 4m'; expect(isValidGoDuration(durationString)).toEqual(false); }); + + it('invalid float number duration string returns false', () => { + const durationString = '3.h -4.0m 0.s 2.ms -0.us 5.ns'; + expect(isValidGoDuration(durationString)).toEqual(false); + }); }); }); diff --git a/packages/grafana-data/src/datetime/durationutil.ts b/packages/grafana-data/src/datetime/durationutil.ts index 9b318804936..3a012bd7a1d 100644 --- a/packages/grafana-data/src/datetime/durationutil.ts +++ b/packages/grafana-data/src/datetime/durationutil.ts @@ -124,7 +124,7 @@ export function isValidDuration(durationString: string): boolean { export function isValidGoDuration(durationString: string): boolean { const timeUnits = ['h', 'm', 's', 'ms', 'us', 'µs', 'ns']; for (const value of durationString.trim().split(' ')) { - const match = value.match(/(\d+)(.+)/); + const match = value.match(/([0-9]*[.]?[0-9]+)(.+)/); if (match === null || match.length !== 3) { return false; } diff --git a/public/app/plugins/datasource/tempo/NativeSearch.tsx b/public/app/plugins/datasource/tempo/NativeSearch.tsx index 0e6743305a9..2a43a04137a 100644 --- a/public/app/plugins/datasource/tempo/NativeSearch.tsx +++ b/public/app/plugins/datasource/tempo/NativeSearch.tsx @@ -33,7 +33,7 @@ interface Props { } const PRISM_LANGUAGE = 'tempo'; -const durationPlaceholder = 'e.g. 1.2s, 100ms, 500us'; +const durationPlaceholder = 'e.g. 1.2s, 100ms'; const plugins = [ BracesPlugin(), SlatePrism({