From b3bda02063ee96001089a4b66f1597751d545604 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Thu, 3 Sep 2015 12:35:21 +0200 Subject: [PATCH] feat(elasticsearch): lots of work on elasticsearch metrics processing, handling grouped responses, etc, #1034 --- .../datasource/elasticsearch/datasource.js | 14 ++- .../elasticsearch/partials/query.editor.html | 2 +- .../datasource/elasticsearch/queryBuilder.js | 22 ++--- public/test/specs/elasticsearch-specs.js | 90 +++++++++++++++++-- 4 files changed, 105 insertions(+), 23 deletions(-) diff --git a/public/app/plugins/datasource/elasticsearch/datasource.js b/public/app/plugins/datasource/elasticsearch/datasource.js index 0b8eb750306..b9a32df0066 100644 --- a/public/app/plugins/datasource/elasticsearch/datasource.js +++ b/public/app/plugins/datasource/elasticsearch/datasource.js @@ -172,6 +172,8 @@ function (angular, _, config, kbn, moment, ElasticQueryBuilder) { return date.getTime(); }; + // this is quite complex + // neeed to recurise down the nested buckets to build series ElasticDatasource.prototype._processBuckets = function(buckets, groupByFields, series, level, parentName, parentTime) { var points = []; var groupBy = groupByFields[level]; @@ -180,13 +182,14 @@ function (angular, _, config, kbn, moment, ElasticQueryBuilder) { var bucket = buckets[i]; if (groupBy) { - var seriesName = ""; + var seriesName = level > 0 ? bucket.key : ''; var time = parentTime || bucket.key; this._processBuckets(bucket[groupBy.field].buckets, groupByFields, series, level+1, seriesName, time) } else { var seriesName = parentName; if (level > 0) { + if (seriesName) { seriesName += " "; } seriesName += bucket.key; } else { parentTime = bucket.key; @@ -202,12 +205,17 @@ function (angular, _, config, kbn, moment, ElasticQueryBuilder) { var series = []; for (var i = 0; i < results.responses.length; i++) { - var buckets = results.responses[i].aggregations.histogram.buckets; + var response = results.responses[i]; + if (response.error) { + throw { message: response.error }; + } + + var buckets = response.aggregations.histogram.buckets; var target = targets[i]; var points = []; var querySeries = {} - this._processBuckets(buckets, target.groupByFields, querySeries, 0, target.refId); + this._processBuckets(buckets, target.groupByFields, querySeries, 0); _.each(querySeries, function(value) { series.push(value); diff --git a/public/app/plugins/datasource/elasticsearch/partials/query.editor.html b/public/app/plugins/datasource/elasticsearch/partials/query.editor.html index 190dcd88deb..29e66c477c5 100644 --- a/public/app/plugins/datasource/elasticsearch/partials/query.editor.html +++ b/public/app/plugins/datasource/elasticsearch/partials/query.editor.html @@ -75,7 +75,7 @@