瀏覽代碼

Fix rate function hint for series with nulls

David Kaltschmidt 7 年之前
父節點
當前提交
107bef2d6d

+ 4 - 3
public/app/plugins/datasource/prometheus/query_hints.ts

@@ -30,13 +30,14 @@ export function getQueryHints(series: any[], datasource?: any): any[] {
     const datapoints: number[][] = s.datapoints;
     if (query.indexOf('rate(') === -1 && datapoints.length > 1) {
       let increasing = false;
-      const monotonic = datapoints.filter(dp => dp[0] !== null).every((dp, index) => {
+      const nonNullData = datapoints.filter(dp => dp[0] !== null);
+      const monotonic = nonNullData.every((dp, index) => {
         if (index === 0) {
           return true;
         }
-        increasing = increasing || dp[0] > datapoints[index - 1][0];
+        increasing = increasing || dp[0] > nonNullData[index - 1][0];
         // monotonic?
-        return dp[0] >= datapoints[index - 1][0];
+        return dp[0] >= nonNullData[index - 1][0];
       });
       if (increasing && monotonic) {
         const simpleMetric = query.trim().match(/^\w+$/);

+ 8 - 0
public/app/plugins/datasource/prometheus/specs/query_hints.test.ts

@@ -15,6 +15,14 @@ describe('getQueryHints()', () => {
     expect(hints).toEqual([null]);
   });
 
+  it('returns no hint for a flat series', () => {
+    const series = [
+      { datapoints: [[null, 1000], [23, 1001], [null, 1002], [23, 1003]], query: 'metric', responseIndex: 0 },
+    ];
+    const hints = getQueryHints(series);
+    expect(hints).toEqual([null]);
+  });
+
   it('returns a rate hint for a monotonously increasing series', () => {
     const series = [{ datapoints: [[23, 1000], [24, 1001]], query: 'metric', responseIndex: 0 }];
     const hints = getQueryHints(series);