From 0f5945c5578b3a4e2d469a4d2fb0bf3efde2db09 Mon Sep 17 00:00:00 2001 From: David Kaltschmidt Date: Fri, 10 Aug 2018 15:29:21 +0200 Subject: [PATCH] Explore: still show rate hint if query is complex - action hint currently only works for very simple queries - show a hint w/o action otherwise --- .../datasource/prometheus/datasource.ts | 24 ++++++++++++------- .../prometheus/specs/datasource.jest.ts | 24 +++++++++++++++++++ 2 files changed, 39 insertions(+), 9 deletions(-) diff --git a/public/app/plugins/datasource/prometheus/datasource.ts b/public/app/plugins/datasource/prometheus/datasource.ts index ef440ab515d..208a7b6a2f0 100644 --- a/public/app/plugins/datasource/prometheus/datasource.ts +++ b/public/app/plugins/datasource/prometheus/datasource.ts @@ -110,10 +110,9 @@ export function determineQueryHints(series: any[], datasource?: any): any[] { // Check for monotony const datapoints: [number, number][] = s.datapoints; - const simpleMetric = query.trim().match(/^\w+$/); - if (simpleMetric && datapoints.length > 1) { + if (datapoints.length > 1) { let increasing = false; - const monotonic = datapoints.every((dp, index) => { + const monotonic = datapoints.filter(dp => dp[0] !== null).every((dp, index) => { if (index === 0) { return true; } @@ -122,18 +121,25 @@ export function determineQueryHints(series: any[], datasource?: any): any[] { return dp[0] >= datapoints[index - 1][0]; }); if (increasing && monotonic) { - const label = 'Time series is monotonously increasing.'; - return { - label, - index, - fix: { + const simpleMetric = query.trim().match(/^\w+$/); + let label = 'Time series is monotonously increasing.'; + let fix; + if (simpleMetric) { + fix = { label: 'Fix by adding rate().', action: { type: 'ADD_RATE', query, index, }, - }, + }; + } else { + label = `${label} Try applying a rate() function.`; + } + return { + label, + index, + fix, }; } } diff --git a/public/app/plugins/datasource/prometheus/specs/datasource.jest.ts b/public/app/plugins/datasource/prometheus/specs/datasource.jest.ts index a108909e6e1..fea60658332 100644 --- a/public/app/plugins/datasource/prometheus/specs/datasource.jest.ts +++ b/public/app/plugins/datasource/prometheus/specs/datasource.jest.ts @@ -213,6 +213,30 @@ describe('PrometheusDatasource', () => { }); }); + it('returns a rate hint w/o action for a complex monotonously increasing series', () => { + const series = [{ datapoints: [[23, 1000], [24, 1001]], query: 'sum(metric)', responseIndex: 0 }]; + const hints = determineQueryHints(series); + expect(hints.length).toBe(1); + expect(hints[0].label).toContain('rate()'); + expect(hints[0].fix).toBeUndefined(); + }); + + it('returns a rate hint for a monotonously increasing series with missing data', () => { + const series = [{ datapoints: [[23, 1000], [null, 1001], [24, 1002]], query: 'metric', responseIndex: 0 }]; + const hints = determineQueryHints(series); + expect(hints.length).toBe(1); + expect(hints[0]).toMatchObject({ + label: 'Time series is monotonously increasing.', + index: 0, + fix: { + action: { + type: 'ADD_RATE', + query: 'metric', + }, + }, + }); + }); + it('returns a histogram hint for a bucket series', () => { const series = [{ datapoints: [[23, 1000]], query: 'metric_bucket', responseIndex: 0 }]; const hints = determineQueryHints(series);