Bladeren bron

Prometheus: Prevents panel editor crash when switching to Prometheus datasource (#18616)

* Fix: Fixes panel editor crash when switching to Promehteus
Fixes: #18600

* Refactor: Adds tests
Hugo Häggmark 6 jaren geleden
bovenliggende
commit
d7ccf98b1b

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

@@ -0,0 +1,44 @@
+import { getQueryHints } from './query_hints';
+
+describe('getQueryHints', () => {
+  describe('when called without datapoints in series', () => {
+    it('then it should use rows instead and return correct hint', () => {
+      const series = [
+        {
+          fields: [
+            {
+              name: 'Some Name',
+            },
+          ],
+          rows: [[1], [2]],
+        },
+      ];
+
+      const result = getQueryHints('up', series);
+      expect(result).toEqual([
+        {
+          fix: { action: { query: 'up', type: 'ADD_RATE' }, label: 'Fix by adding rate().' },
+          label: 'Time series is monotonically increasing.',
+          type: 'APPLY_RATE',
+        },
+      ]);
+    });
+  });
+
+  describe('when called without datapoints and rows in series', () => {
+    it('then it should use an empty array and return null', () => {
+      const series = [
+        {
+          fields: [
+            {
+              name: 'Some Name',
+            },
+          ],
+        },
+      ];
+
+      const result = getQueryHints('up', series);
+      expect(result).toEqual(null);
+    });
+  });
+});

+ 1 - 1
public/app/plugins/datasource/prometheus/query_hints.ts

@@ -29,7 +29,7 @@ export function getQueryHints(query: string, series?: any[], datasource?: any):
   // Check for monotonicity on series (table results are being ignored here)
   if (series && series.length > 0) {
     series.forEach(s => {
-      const datapoints: number[][] = s.datapoints;
+      const datapoints: number[][] = s.datapoints || s.rows || [];
       if (query.indexOf('rate(') === -1 && datapoints.length > 1) {
         let increasing = false;
         const nonNullData = datapoints.filter(dp => dp[0] !== null);