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({