Batch all influxdb 0.9 queries (per panel) in one request, #1525

This commit is contained in:
Torkel Ödegaard 2015-06-26 11:27:49 +02:00
parent 3f167d7fd1
commit 906e70e599

View File

@ -34,32 +34,39 @@ function (angular, _, kbn, InfluxSeries, InfluxQueryBuilder) {
InfluxDatasource.prototype.query = function(options) {
var timeFilter = getTimeFilter(options);
var i, y;
var promises = _.map(options.targets, function(target) {
if (target.hide) {
return [];
}
var allQueries = _.map(options.targets, function(target) {
if (target.hide) { return []; }
// build query
var queryBuilder = new InfluxQueryBuilder(target);
var query = queryBuilder.build();
// replace grafana variables
query = query.replace('$timeFilter', timeFilter);
var query = queryBuilder.build();
query = query.replace(/\$interval/g, (target.interval || options.interval));
return query;
// replace templated variables
query = templateSrv.replace(query, options.scopedVars);
}).join("\n");
var alias = target.alias ? templateSrv.replace(target.alias, options.scopedVars) : '';
// replace grafana variables
allQueries = allQueries.replace(/\$timeFilter/g, timeFilter);
var handleResponse = _.partial(handleInfluxQueryResponse, alias);
return this._seriesQuery(query).then(handleResponse);
// replace templated variables
allQueries = templateSrv.replace(allQueries, options.scopedVars);
return this._seriesQuery(allQueries).then(function(data) {
if (!data || !data.results || !data.results[0].series) {
return [];
}
}, this);
var seriesList = [];
for (i = 0; i < data.results.length; i++) {
var alias = (options.targets[i] || {}).alias;
var targetSeries = new InfluxSeries({ series: data.results[i].series, alias: alias }).getTimeSeries();
for (y = 0; y < targetSeries.length; y++) {
seriesList.push(targetSeries[y]);
}
}
return $q.all(promises).then(function(results) {
return { data: _.flatten(results) };
return { data: seriesList };
});
};
@ -176,13 +183,6 @@ function (angular, _, kbn, InfluxSeries, InfluxQueryBuilder) {
return deferred.promise;
};
function handleInfluxQueryResponse(alias, data) {
if (!data || !data.results || !data.results[0].series) {
return [];
}
return new InfluxSeries({ series: data.results[0].series, alias: alias }).getTimeSeries();
}
function getTimeFilter(options) {
var from = getInfluxTime(options.range.from);
var until = getInfluxTime(options.range.to);