|
|
|
@ -76,55 +76,83 @@ function (angular, _, kbn) { |
|
|
|
|
* Gets the list of metrics |
|
|
|
|
* @returns {*|Promise} |
|
|
|
|
*/ |
|
|
|
|
KairosDBDatasource.prototype.performMetricSuggestQuery = function() { |
|
|
|
|
KairosDBDatasource.prototype._performMetricSuggestQuery = function(metric) { |
|
|
|
|
var options = { |
|
|
|
|
url : this.url + '/api/v1/metricnames', |
|
|
|
|
method : 'GET' |
|
|
|
|
url: this.url + '/api/v1/metricnames', |
|
|
|
|
method: 'GET' |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
return $http(options).then(function(response) { |
|
|
|
|
if (!response.data) { |
|
|
|
|
return []; |
|
|
|
|
return $q.when([]); |
|
|
|
|
} |
|
|
|
|
return response.data.results; |
|
|
|
|
var metrics = []; |
|
|
|
|
_.each(response.data.results, function(r) { |
|
|
|
|
if (r.indexOf(metric) >= 0) { |
|
|
|
|
metrics.push(r); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
return metrics; |
|
|
|
|
}); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
KairosDBDatasource.prototype.performListTagNames = function() { |
|
|
|
|
KairosDBDatasource.prototype._performMetricKeyLookup = function(metric) { |
|
|
|
|
if(!metric) { return $q.when([]); } |
|
|
|
|
|
|
|
|
|
var options = { |
|
|
|
|
url : this.url + '/api/v1/tagnames', |
|
|
|
|
method : 'GET' |
|
|
|
|
method: 'POST', |
|
|
|
|
url: this.url + '/api/v1/datapoints/query/tags', |
|
|
|
|
data: { |
|
|
|
|
metrics: [{ name: metric }], |
|
|
|
|
cache_time: 0, |
|
|
|
|
start_absolute: 0 |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
return $http(options).then(function(response) { |
|
|
|
|
if (!response.data) { |
|
|
|
|
return []; |
|
|
|
|
return $http(options).then(function(result) { |
|
|
|
|
if (!result.data) { |
|
|
|
|
return $q.when([]); |
|
|
|
|
} |
|
|
|
|
return response.data.results; |
|
|
|
|
var tagks = []; |
|
|
|
|
_.each(result.data.queries[0].results[0].tags, function(tagv, tagk) { |
|
|
|
|
if(tagks.indexOf(tagk) === -1) { |
|
|
|
|
tagks.push(tagk); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
return tagks; |
|
|
|
|
}); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
KairosDBDatasource.prototype.performListTagValues = function() { |
|
|
|
|
KairosDBDatasource.prototype._performMetricKeyValueLookup = function(metric, key) { |
|
|
|
|
if(!metric || !key) { |
|
|
|
|
return $q.when([]); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var options = { |
|
|
|
|
url : this.url + '/api/v1/tagvalues', |
|
|
|
|
method : 'GET' |
|
|
|
|
method: 'POST', |
|
|
|
|
url: this.url + '/api/v1/datapoints/query/tags', |
|
|
|
|
data: { |
|
|
|
|
metrics: [{ name: metric }], |
|
|
|
|
cache_time: 0, |
|
|
|
|
start_absolute: 0 |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
return $http(options).then(function(response) { |
|
|
|
|
if (!response.data) { |
|
|
|
|
return []; |
|
|
|
|
return $http(options).then(function(result) { |
|
|
|
|
if (!result.data) { |
|
|
|
|
return $q.when([]); |
|
|
|
|
} |
|
|
|
|
return response.data.results; |
|
|
|
|
return result.data.queries[0].results[0].tags[key]; |
|
|
|
|
}); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
KairosDBDatasource.prototype.performTagSuggestQuery = function(metricname) { |
|
|
|
|
KairosDBDatasource.prototype.performTagSuggestQuery = function(metric) { |
|
|
|
|
var options = { |
|
|
|
|
url : this.url + '/api/v1/datapoints/query/tags', |
|
|
|
|
method : 'POST', |
|
|
|
|
data : { |
|
|
|
|
metrics : [{ name : metricname }], |
|
|
|
|
cache_time : 0, |
|
|
|
|
url: this.url + '/api/v1/datapoints/query/tags', |
|
|
|
|
method: 'POST', |
|
|
|
|
data: { |
|
|
|
|
metrics: [{ name: metric }], |
|
|
|
|
cache_time: 0, |
|
|
|
|
start_absolute: 0 |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
@ -140,19 +168,7 @@ function (angular, _, kbn) { |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
KairosDBDatasource.prototype.metricFindQuery = function(query) { |
|
|
|
|
function format(results, query) { |
|
|
|
|
return _.chain(results) |
|
|
|
|
.filter(function(result) { |
|
|
|
|
return result.indexOf(query) >= 0; |
|
|
|
|
}) |
|
|
|
|
.map(function(result) { |
|
|
|
|
return { |
|
|
|
|
text: result, |
|
|
|
|
expandable: true |
|
|
|
|
}; |
|
|
|
|
}) |
|
|
|
|
.value(); |
|
|
|
|
} |
|
|
|
|
if (!query) { return $q.when([]); } |
|
|
|
|
|
|
|
|
|
var interpolated; |
|
|
|
|
try { |
|
|
|
@ -162,30 +178,32 @@ function (angular, _, kbn) { |
|
|
|
|
return $q.reject(err); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var responseTransform = function(result) { |
|
|
|
|
return _.map(result, function(value) { |
|
|
|
|
return {text: value}; |
|
|
|
|
}); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
var metrics_regex = /metrics\((.*)\)/; |
|
|
|
|
var tag_names_regex = /tag_names\((.*)\)/; |
|
|
|
|
var tag_values_regex = /tag_values\((.*)\)/; |
|
|
|
|
var tag_values_regex = /tag_values\((.*),\s?(.*?)\)/; |
|
|
|
|
|
|
|
|
|
var metrics_query = interpolated.match(metrics_regex); |
|
|
|
|
if (metrics_query) { |
|
|
|
|
return this.performMetricSuggestQuery().then(function(metrics) { |
|
|
|
|
return format(metrics, metrics_query[1]); |
|
|
|
|
}); |
|
|
|
|
return this._performMetricSuggestQuery(metrics_query[1]).then(responseTransform); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var tag_names_query = interpolated.match(tag_names_regex); |
|
|
|
|
if (tag_names_query) { |
|
|
|
|
return this.performListTagNames().then(function(tag_names) { |
|
|
|
|
return format(tag_names, tag_names_query[1]); |
|
|
|
|
}); |
|
|
|
|
return this._performMetricKeyLookup(tag_names_query[1]).then(responseTransform); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var tag_values_query = interpolated.match(tag_values_regex); |
|
|
|
|
if (tag_values_query) { |
|
|
|
|
return this.performListTagValues().then(function(tag_values) { |
|
|
|
|
return format(tag_values, tag_values_query[1]); |
|
|
|
|
}); |
|
|
|
|
return this._performMetricKeyValueLookup(tag_values_query[1], tag_values_query[2]).then(responseTransform); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return $q.when([]); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
|