|
|
@@ -135,14 +135,33 @@ function (angular, _, config, kbn, moment, ElasticQueryBuilder) {
|
|
|
};
|
|
|
|
|
|
ElasticDatasource.prototype.query = function(options) {
|
|
|
- var queryBuilder = new ElasticQueryBuilder;
|
|
|
- var query = queryBuilder.build(options.targets);
|
|
|
- query = query.replace(/\$interval/g, options.interval);
|
|
|
- query = query.replace(/\$rangeFrom/g, this.translateTime(options.range.from));
|
|
|
- query = query.replace(/\$rangeTo/g, this.translateTime(options.range.to));
|
|
|
- query = query.replace(/\$maxDataPoints/g, options.maxDataPoints);
|
|
|
- query = templateSrv.replace(query, options.scopedVars);
|
|
|
- return this._post('/_search?search_type=count', query).then(this._getTimeSeries);
|
|
|
+ var queryBuilder = new ElasticQueryBuilder();
|
|
|
+ var header = '{"index":"' + this.index + '","search_type":"count","ignore_unavailable":true}'
|
|
|
+ var payload = ""
|
|
|
+ var sentTargets = [];
|
|
|
+ var timeFrom = this.translateTime(options.range.from);
|
|
|
+ var timeTo = this.translateTime(options.range.to);
|
|
|
+
|
|
|
+ _.each(options.targets, function(target) {
|
|
|
+ if (target.hide) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var esQuery = queryBuilder.build(target, timeFrom, timeTo);
|
|
|
+ payload += header + '\n';
|
|
|
+ payload += esQuery + '\n';
|
|
|
+
|
|
|
+ sentTargets.push(target);
|
|
|
+ });
|
|
|
+
|
|
|
+ payload = payload.replace(/\$interval/g, options.interval);
|
|
|
+ payload = payload.replace(/\$rangeFrom/g, this.translateTime(options.range.from));
|
|
|
+ payload = payload.replace(/\$rangeTo/g, this.translateTime(options.range.to));
|
|
|
+ payload = payload.replace(/\$maxDataPoints/g, options.maxDataPoints);
|
|
|
+ payload = templateSrv.replace(payload, options.scopedVars);
|
|
|
+
|
|
|
+ var processTimeSeries = _.partial(this._processTimeSeries, sentTargets);
|
|
|
+ return this._post('/_msearch?search_type=count', payload).then(processTimeSeries);
|
|
|
};
|
|
|
|
|
|
ElasticDatasource.prototype.translateTime = function(date) {
|
|
|
@@ -150,31 +169,37 @@ function (angular, _, config, kbn, moment, ElasticQueryBuilder) {
|
|
|
return date;
|
|
|
}
|
|
|
|
|
|
- return date.toJSON();
|
|
|
+ return date.getTime();
|
|
|
};
|
|
|
|
|
|
- ElasticDatasource.prototype._getTimeSeries = function(results) {
|
|
|
- var _aggregation2timeSeries = function(aggregation) {
|
|
|
- var datapoints = aggregation.date_histogram.buckets.map(function(entry) {
|
|
|
- return [entry.stats.avg, entry.key];
|
|
|
- });
|
|
|
- return { target: aggregation.key, datapoints: datapoints };
|
|
|
- };
|
|
|
- var data = [];
|
|
|
+ ElasticDatasource._aggToSeries = function(agg) {
|
|
|
+ var datapoints = agg.date_histogram.buckets.map(function(entry) {
|
|
|
+ return [entry.stats.avg, entry.key];
|
|
|
+ });
|
|
|
+ return { target: agg.key, datapoints: datapoints };
|
|
|
+ };
|
|
|
|
|
|
- if (results && results.aggregations) {
|
|
|
- for (var target in results.aggregations) {
|
|
|
- if (!results.aggregations.hasOwnProperty(target)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- if (results.aggregations[target].date_histogram && results.aggregations[target].date_histogram.buckets) {
|
|
|
- data.push(_aggregation2timeSeries(results.aggregations[target]));
|
|
|
- } else if (results.aggregations[target].terms && results.aggregations[target].terms.buckets) {
|
|
|
- [].push.apply(data, results.aggregations[target].terms.buckets.map(_aggregation2timeSeries));
|
|
|
- }
|
|
|
+
|
|
|
+ ElasticDatasource.prototype._processTimeSeries = function(targets, results) {
|
|
|
+ var series = [];
|
|
|
+
|
|
|
+ _.each(results.responses, function(response, index) {
|
|
|
+ var buckets = response.aggregations.date_histogram.buckets;
|
|
|
+ var target = targets[index];
|
|
|
+ var points = [];
|
|
|
+
|
|
|
+ for (var i = 0; i < buckets.length; i++) {
|
|
|
+ var bucket = buckets[i];
|
|
|
+ points[i] = [bucket.doc_count, bucket.key];
|
|
|
}
|
|
|
- }
|
|
|
- return { data: data };
|
|
|
+
|
|
|
+ series.push({target: 'name', datapoints: points})
|
|
|
+ console.log('Nr DataPoints: ' + points.length);
|
|
|
+ });
|
|
|
+
|
|
|
+ console.log(series);
|
|
|
+
|
|
|
+ return { data: series };
|
|
|
};
|
|
|
|
|
|
ElasticDatasource.prototype.metricFindQuery = function(query) {
|