Torkel Ödegaard 10 лет назад
Родитель
Сommit
05d725d0b8

+ 11 - 1
public/app/plugins/datasource/influxdb/queryBuilder.js

@@ -14,6 +14,16 @@ function (_) {
     return this.target.rawQuery ? this._modifyRawQuery() : this._buildQuery();
     return this.target.rawQuery ? this._modifyRawQuery() : this._buildQuery();
   };
   };
 
 
+  p.showTagsQuery = function() {
+    var query = 'SHOW TAG KEYS';
+
+    if (this.target.measurement) {
+      query += ' FROM "' + this.target.measurement + '"';
+    }
+
+    return query;
+  };
+
   p._buildQuery = function() {
   p._buildQuery = function() {
     var target = this.target;
     var target = this.target;
 
 
@@ -27,7 +37,7 @@ function (_) {
     var measurement = target.measurement;
     var measurement = target.measurement;
     var aggregationFunc = target.function || 'mean';
     var aggregationFunc = target.function || 'mean';
 
 
-    if(!measurement.match('^/.*/') && !measurement.match(/^merge\(.*\)/)) {
+    if (!measurement.match('^/.*/') && !measurement.match(/^merge\(.*\)/)) {
       measurement = '"' + measurement+ '"';
       measurement = '"' + measurement+ '"';
     }
     }
 
 

+ 6 - 13
public/app/plugins/datasource/influxdb/queryCtrl.js

@@ -1,8 +1,9 @@
 define([
 define([
   'angular',
   'angular',
-  'lodash'
+  'lodash',
+  './queryBuilder',
 ],
 ],
-function (angular, _) {
+function (angular, _, InfluxQueryBuilder) {
   'use strict';
   'use strict';
 
 
   var module = angular.module('grafana.controllers');
   var module = angular.module('grafana.controllers');
@@ -24,6 +25,8 @@ function (angular, _) {
       target.tags = target.tags || [];
       target.tags = target.tags || [];
       target.groupByTags = target.groupByTags || [];
       target.groupByTags = target.groupByTags || [];
 
 
+      $scope.queryBuilder = new InfluxQueryBuilder(target);
+
       if (!target.measurement) {
       if (!target.measurement) {
         $scope.measurementSegment = MetricSegment.newSelectMeasurement();
         $scope.measurementSegment = MetricSegment.newSelectMeasurement();
       } else {
       } else {
@@ -129,21 +132,11 @@ function (angular, _) {
       return segments;
       return segments;
     };
     };
 
 
-    $scope.buildTagKeysQuery = function(target) {
-      var query = 'SHOW TAG KEYS';
-
-      if (target.measurement) {
-        query += ' FROM "' + target.measurement + '"';
-      }
-
-      return query;
-    };
-
     $scope.getTagsOrValues = function(segment, index) {
     $scope.getTagsOrValues = function(segment, index) {
       var query, queryType;
       var query, queryType;
       if (segment.type === 'key' || segment.type === 'plus-button') {
       if (segment.type === 'key' || segment.type === 'plus-button') {
         queryType = 'TAG_KEYS';
         queryType = 'TAG_KEYS';
-        query = $scope.buildTagKeysQuery($scope.target, segment);
+        query = $scope.queryBuilder.showTagsQuery();
       } else if (segment.type === 'value')  {
       } else if (segment.type === 'value')  {
         queryType = 'TAG_VALUES';
         queryType = 'TAG_VALUES';
         query = 'SHOW TAG VALUES FROM "' + $scope.target.measurement + '" WITH KEY = ' + $scope.tagSegments[index-2].value;
         query = 'SHOW TAG VALUES FROM "' + $scope.target.measurement + '" WITH KEY = ' + $scope.tagSegments[index-2].value;

+ 28 - 0
public/test/specs/influx09-querybuilder-specs.js

@@ -62,6 +62,34 @@ define([
       });
       });
     });
     });
 
 
+    describe('when building tag keys query', function() {
+
+      describe('given picked measurement', function() {
+        it('build query with measurement filter', function() {
+          var builder = new InfluxQueryBuilder({ measurement: 'cpu', tags: [] });
+          var query = builder.showTagsQuery();
+          expect(query).to.be('SHOW TAG KEYS FROM "cpu"');
+        });
+      });
+
+      describe('given no picked measurement', function() {
+        it('build query without filter', function() {
+          var builder = new InfluxQueryBuilder({ measurement: '', tags: [] });
+          var query = builder.showTagsQuery();
+          expect(query).to.be('SHOW TAG KEYS');
+        });
+      });
+
+      describe('given an existing tag', function() {
+        it('build query with filter', function() {
+          var builder = new InfluxQueryBuilder({ measurement: '', tags: [{key: 'host', value: 'se1'}] });
+          var query = builder.showTagsQuery();
+          expect(query).to.be('SHOW TAG KEYS');
+        });
+      });
+
+    });
+
   });
   });
 
 
 });
 });

+ 0 - 17
public/test/specs/influxdbQueryCtrl-specs.js

@@ -198,23 +198,6 @@ define([
       });
       });
     });
     });
 
 
-    describe('when building tag keys query', function() {
-
-      describe('given picked measurement', function() {
-        it('build query with measurement filter', function() {
-          var query = ctx.scope.buildTagKeysQuery({ measurement: 'cpu', tags: [] }, {type: 'key'});
-          expect(query).to.be('SHOW TAG KEYS FROM "cpu"');
-        });
-      });
-
-      describe('given no picked measurement', function() {
-        it('build query without filter', function() {
-          var query = ctx.scope.buildTagKeysQuery({ measurement: '', tags: [] }, {type: 'key'});
-          expect(query).to.be('SHOW TAG KEYS');
-        });
-      });
-
-    });
 
 
   });
   });
 });
 });