فهرست منبع

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

Torkel Ödegaard 10 سال پیش
والد
کامیت
906e70e599
1فایلهای تغییر یافته به همراه23 افزوده شده و 23 حذف شده
  1. 23 23
      public/app/plugins/datasource/influxdb/datasource.js

+ 23 - 23
public/app/plugins/datasource/influxdb/datasource.js

@@ -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);