OpenTSDB: Restrict typeahead tag keys and values

When selecting metric tag keys, we only are interested in keys which are
associated with this metric. Likewise, when selecting a value for a
certain key, we only want to consider values which apply to the given
key and metric.
This commit is contained in:
Lex Herbert
2015-06-04 17:45:09 -07:00
parent 83279604c6
commit 463a750c07
2 changed files with 51 additions and 2 deletions
@@ -90,6 +90,55 @@ function (angular, _, kbn) {
});
};
OpenTSDBDatasource.prototype.performMetricKeyValueLookup = function(metric, key) {
if(metric === "") {
throw "Metric not set.";
} else if(key === "") {
throw "Key not set.";
}
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" };
@@ -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);
};