diff --git a/docs/sources/guides/gettingstarted.md b/docs/sources/guides/gettingstarted.md index a2939b3724a..4bb250ef55c 100644 --- a/docs/sources/guides/gettingstarted.md +++ b/docs/sources/guides/gettingstarted.md @@ -48,7 +48,6 @@ in the main Time Picker in the upper right, but they can also have relative time 2. To edit the graph you click on the graph title to open the panel menu, then `Edit`. 3. This should take you to the `Metrics` tab. In this tab you should see the editor for your default data source. - ## Drag-and-Drop panels You can Drag-and-Drop Panels within and between Rows. Click and hold the Panel title, and drag it to its new location. diff --git a/public/app/plugins/datasource/influxdb/funcEditor.js b/public/app/plugins/datasource/influxdb/funcEditor.js index 12731c0859d..05bcae6835b 100644 --- a/public/app/plugins/datasource/influxdb/funcEditor.js +++ b/public/app/plugins/datasource/influxdb/funcEditor.js @@ -11,30 +11,26 @@ function (angular, _, $) { .directive('influxdbFuncEditor', function($compile) { var funcSpanTemplate = '{{target.function}}('; + 'data-toggle="dropdown">{{field.func}}('; var paramTemplate = ''; return { restrict: 'A', + scope: { + field: "=", + }, link: function postLink($scope, elem) { var $funcLink = $(funcSpanTemplate); - $scope.functionMenu = _.map($scope.functions, function(func) { - return { - text: func, - click: "changeFunction('" + func + "');" - }; - }); - function clickFuncParam() { /*jshint validthis:true */ var $link = $(this); var $input = $link.next(); - $input.val($scope.target.column); + $input.val($scope.field.name); $input.css('width', ($link.width() + 16) + 'px'); $link.hide(); @@ -58,7 +54,7 @@ function (angular, _, $) { if ($input.val() !== '') { $link.text($input.val()); - $scope.target.column = $input.val(); + $scope.field.name = $input.val(); $scope.$apply($scope.get_data); } @@ -84,7 +80,7 @@ function (angular, _, $) { $input.typeahead({ source: function () { - return $scope.listColumns.apply(null, arguments); + return $scope.getFields.apply(null, arguments); }, minLength: 0, items: 20, diff --git a/public/app/plugins/datasource/influxdb/partials/query.editor.html b/public/app/plugins/datasource/influxdb/partials/query.editor.html index 89571c06022..81e0b07cbd9 100644 --- a/public/app/plugins/datasource/influxdb/partials/query.editor.html +++ b/public/app/plugins/datasource/influxdb/partials/query.editor.html @@ -65,10 +65,9 @@
  • SELECT
  • - @@ -114,8 +113,8 @@ -
  • - GROUP BY +
  • + GROUP BY
  • diff --git a/public/app/plugins/datasource/influxdb/queryBuilder.js b/public/app/plugins/datasource/influxdb/queryBuilder.js index a167abb81d6..ca7bb02496d 100644 --- a/public/app/plugins/datasource/influxdb/queryBuilder.js +++ b/public/app/plugins/datasource/influxdb/queryBuilder.js @@ -32,12 +32,15 @@ function (_) { if (type === 'TAG_KEYS') { query = 'SHOW TAG KEYS'; - measurement= this.target.measurement; + measurement = this.target.measurement; } else if (type === 'TAG_VALUES') { query = 'SHOW TAG VALUES'; - measurement= this.target.measurement; + measurement = this.target.measurement; } else if (type === 'MEASUREMENTS') { query = 'SHOW MEASUREMENTS'; + } else if (type === 'FIELDS') { + query = 'SHOW FIELD KEYS FROM "' + this.target.measurement + '"'; + return query; } if (measurement) { diff --git a/public/app/plugins/datasource/influxdb/queryCtrl.js b/public/app/plugins/datasource/influxdb/queryCtrl.js index d1a524d2277..16e74c8e6bf 100644 --- a/public/app/plugins/datasource/influxdb/queryCtrl.js +++ b/public/app/plugins/datasource/influxdb/queryCtrl.js @@ -21,9 +21,12 @@ function (angular, _, InfluxQueryBuilder) { $scope.init = function() { var target = $scope.target; - target.function = target.function || 'mean'; target.tags = target.tags || []; target.groupByTags = target.groupByTags || []; + target.fields = target.fields || [{ + name: 'value', + func: target.function || 'mean' + }]; $scope.queryBuilder = new InfluxQueryBuilder(target); @@ -94,6 +97,15 @@ function (angular, _, InfluxQueryBuilder) { $scope.$parent.get_data(); }; + $scope.getFields = function(query, callback) { + var fieldsQuery = $scope.queryBuilder.buildExploreQuery('FIELDS'); + return $scope.datasource.metricFindQuery(fieldsQuery) + .then(function(results) { + var fields = _.pluck(results, 'text'); + callback(fields); + }); + }; + $scope.toggleQueryMode = function () { $scope.target.rawQuery = !$scope.target.rawQuery; }; diff --git a/public/test/specs/influx09-querybuilder-specs.js b/public/test/specs/influx09-querybuilder-specs.js index 838e1950072..6a18f0013bd 100644 --- a/public/test/specs/influx09-querybuilder-specs.js +++ b/public/test/specs/influx09-querybuilder-specs.js @@ -130,6 +130,12 @@ define([ expect(query).to.be('SHOW TAG VALUES FROM "cpu" WITH KEY = "app" WHERE "host" =~ /server.*/'); }); + it('should build show field query', function() { + var builder = new InfluxQueryBuilder({measurement: 'cpu', tags: [{key: 'app', value: 'email'}]}); + var query = builder.buildExploreQuery('FIELDS'); + expect(query).to.be('SHOW FIELD KEYS FROM "cpu"'); + }); + }); });