Przeglądaj źródła

maintain query order

ryan 6 lat temu
rodzic
commit
80d6475224
1 zmienionych plików z 42 dodań i 12 usunięć
  1. 42 12
      public/app/plugins/datasource/testdata/datasource.ts

+ 42 - 12
public/app/plugins/datasource/testdata/datasource.ts

@@ -1,8 +1,13 @@
 import _ from 'lodash';
-import TableModel from 'app/core/table_model';
-import { DataSourceApi, DataQueryOptions } from '@grafana/ui';
+import { DataSourceApi, DataQueryOptions, TableData, TimeSeries } from '@grafana/ui';
 import { TestDataQuery, Scenario } from './types';
 
+type TestData = TimeSeries | TableData;
+
+export interface TestDataRegistry {
+  [key: string]: TestData[];
+}
+
 export class TestDataDatasource implements DataSourceApi<TestDataQuery> {
   id: number;
 
@@ -42,24 +47,49 @@ export class TestDataDatasource implements DataSourceApi<TestDataQuery> {
         },
       })
       .then(res => {
-        const data = [];
+        const data: TestData[] = [];
 
+        // The results are not in the order we asked for them
         if (res.data.results) {
+          const byRefID: TestDataRegistry = {};
+
           _.forEach(res.data.results, queryRes => {
+            const refId = queryRes.refId || 'Result' + data.length + 1;
+            const qdata: TestData[] = [];
+            byRefID[refId] = qdata;
+
             if (queryRes.tables) {
               for (const table of queryRes.tables) {
-                const model = new TableModel();
-                model.rows = table.rows;
-                model.columns = table.columns;
+                qdata.push(table as TableData);
+              }
+            }
+            if (queryRes.series) {
+              for (const series of queryRes.series) {
+                qdata.push({
+                  target: series.name,
+                  datapoints: series.points,
+                });
+              }
+            }
+          });
 
-                data.push(model);
+          // Return them in the order they were asked for
+          queries.forEach(q => {
+            const found = byRefID[q.refId];
+            if (found) {
+              for (const d of found) {
+                data.push(d);
+                byRefID[q.refId] = null;
               }
             }
-            for (const series of queryRes.series) {
-              data.push({
-                target: series.name,
-                datapoints: series.points,
-              });
+          });
+
+          // In case there are items left over
+          _.forEach(byRefID, v => {
+            if (v) {
+              for (const d of v) {
+                data.push(d);
+              }
             }
           });
         }