Browse Source

fix(influxdb): adds support for multi table values

When quering for tag values without measurement
all tags and values should be shown

closes #4726
bergquist 9 years ago
parent
commit
fde6eee4f4

+ 19 - 9
public/app/plugins/datasource/influxdb/response_parser.ts

@@ -12,17 +12,27 @@ export default class ResponseParser {
       return [];
     }
 
-    var series = influxResults.series[0];
-    return _.map(series.values, (value) => {
-      if (_.isArray(value)) {
-        if (query.toLowerCase().indexOf('show tag values') >= 0) {
-          return { text: (value[1] || value[0]) };
+    var res = [];
+    _.each(influxResults.series, (serie) => {
+      _.each(serie.values, (value) => {
+        if (_.isArray(value)) {
+          if (query.toLowerCase().indexOf('show tag values') >= 0) {
+            addUnique(res, { text: (value[1] || value[0])});
+          } else {
+            addUnique(res, { text: value[0]});
+          }
         } else {
-          return { text: value[0] };
+          addUnique(res, {text: value});
         }
-      } else {
-        return { text: value };
-      }
+      });
     });
+
+    return res;
+  }
+}
+
+function addUnique(arr, value) {
+  if (!_.any(arr, value)) {
+    arr.push(value);
   }
 }

+ 17 - 9
public/app/plugins/datasource/influxdb/specs/response_parser_specs.ts

@@ -38,7 +38,7 @@ describe("influxdb response parser", () => {
               {
                 "name": "hostnameTagValues",
                 "columns": ["hostname"],
-                "values": [ ["server1"], ["server2"] ]
+                "values": [ ["server1"], ["server2"], ["server2"] ]
               }
             ]
           }
@@ -54,7 +54,7 @@ describe("influxdb response parser", () => {
       });
     });
 
-    describe("response from 0.11.0", () => {
+    describe("response from 0.12.0", () => {
       var response = {
         "results": [
            {
@@ -62,8 +62,19 @@ describe("influxdb response parser", () => {
                {
                  "name": "cpu",
                  "columns": [ "key", "value"],
-                 "values": [ [ "source", "site" ], [ "source", "api" ] ]
-               }
+                 "values": [
+                   [ "source", "site" ],
+                   [ "source", "api" ]
+                 ]
+               },
+               {
+                 "name": "logins",
+                 "columns": [ "key", "value"],
+                 "values": [
+                   [ "source", "site" ],
+                   [ "source", "webapi"]
+                 ]
+               },
              ]
            }
         ]
@@ -72,15 +83,12 @@ describe("influxdb response parser", () => {
       var result = this.parser.parse(query, response);
 
       it("should get two responses", () => {
-        expect(_.size(result)).to.be(2);
+        expect(_.size(result)).to.be(3);
         expect(result[0].text).to.be('site');
         expect(result[1].text).to.be('api');
+        expect(result[2].text).to.be('webapi');
       });
     });
-
-
-
-
   });
 
   describe("SHOW FIELD response", () => {