diff --git a/public/app/plugins/datasource/opentsdb/datasource.js b/public/app/plugins/datasource/opentsdb/datasource.js index 1e60bf1e54e..d244b56436e 100644 --- a/public/app/plugins/datasource/opentsdb/datasource.js +++ b/public/app/plugins/datasource/opentsdb/datasource.js @@ -90,6 +90,55 @@ function (angular, _, kbn) { }); }; + OpenTSDBDatasource.prototype.performMetricKeyValueLookup = function(metric, key) { + if(!metric || !key) { + return $q.when([]); + } + + var m = metric + "{" + key + "=*}"; + var options = { + method: 'GET', + url: this.url + '/api/search/lookup', + params: { + m: m, + } + }; + + return backendSrv.datasourceRequest(options).then(function(result) { + result = result.data.results; + var tagvs = []; + _.each(result, function(r) { + tagvs.push(r.tags[key]); + }); + return tagvs; + }); + }; + + OpenTSDBDatasource.prototype.performMetricKeyLookup = function(metric) { + if(metric === "") { + throw "Metric not set."; + } + var options = { + method: 'GET', + url: this.url + '/api/search/lookup', + params: { + m: metric, + } + }; + return backendSrv.datasourceRequest(options).then(function(result) { + result = result.data.results; + var tagks = []; + _.each(result, function(r) { + _.each(r.tags, function(tagv, tagk) { + if(tagks.indexOf(tagk) === -1) { + tagks.push(tagk); + } + }); + }); + return tagks; + }); + }; + OpenTSDBDatasource.prototype.testDatasource = function() { return this.performSuggestQuery('cpu', 'metrics').then(function () { return { status: "success", message: "Data source is working", title: "Success" }; diff --git a/public/app/plugins/datasource/opentsdb/queryCtrl.js b/public/app/plugins/datasource/opentsdb/queryCtrl.js index 576517a50b6..17a2f4bd640 100644 --- a/public/app/plugins/datasource/opentsdb/queryCtrl.js +++ b/public/app/plugins/datasource/opentsdb/queryCtrl.js @@ -50,13 +50,13 @@ function (angular, _, kbn) { $scope.suggestTagKeys = function(query, callback) { $scope.datasource - .performSuggestQuery(query, 'tagk') + .performMetricKeyLookup($scope.target.metric) .then(callback); }; $scope.suggestTagValues = function(query, callback) { $scope.datasource - .performSuggestQuery(query, 'tagv') + .performMetricKeyValueLookup($scope.target.metric, $scope.target.currentTagKey) .then(callback); };