diff --git a/public/app/plugins/datasource/elasticsearch/elastic_response.js b/public/app/plugins/datasource/elasticsearch/elastic_response.js
index 73050ce7f2b..a7c8e6d14bf 100644
--- a/public/app/plugins/datasource/elasticsearch/elastic_response.js
+++ b/public/app/plugins/datasource/elasticsearch/elastic_response.js
@@ -76,8 +76,12 @@ function (_, queryDef) {
newSeries = { datapoints: [], metric: metric.type, field: metric.field, props: props};
for (i = 0; i < esAgg.buckets.length; i++) {
bucket = esAgg.buckets[i];
- value = bucket[metric.id].value;
- newSeries.datapoints.push([value, bucket.key]);
+
+ value = bucket[metric.id];
+ if (value !== undefined) {
+ newSeries.datapoints.push([value.value, bucket.key]);
+ }
+
}
seriesList.push(newSeries);
break;
diff --git a/public/app/plugins/datasource/elasticsearch/metric_agg.js b/public/app/plugins/datasource/elasticsearch/metric_agg.js
index 2073fbc3a55..ab1afa6a017 100644
--- a/public/app/plugins/datasource/elasticsearch/metric_agg.js
+++ b/public/app/plugins/datasource/elasticsearch/metric_agg.js
@@ -35,6 +35,10 @@ function (angular, _, queryDef) {
}
switch($scope.agg.type) {
+ case 'moving_avg': {
+ $scope.agg.aggregation = $scope.agg.aggregation || 'sum';
+ break;
+ }
case 'percentiles': {
$scope.agg.settings.percents = $scope.agg.settings.percents || [25,50,75,95,99];
$scope.settingsLinkText = 'values: ' + $scope.agg.settings.percents.join(',');
@@ -79,19 +83,9 @@ function (angular, _, queryDef) {
};
$scope.getMetrics = function() {
- console.log($scope.target.metrics);
+ var aggs = [{ text: 'Sum', type: 'sum'}, { text: 'Average', type: 'avg'}];
- var mets = _.filter($scope.target.metrics, function(x) {
- return x.type !== 'moving_avg';
- });
-
- mets = _.map(mets, function(m) {
- return { text: m.type, type: m.id };
- });
-
- console.log(mets);
-
- return $q.when(mets)
+ return $q.when(aggs)
.then(uiSegmentSrv.transformToSegments(false));
};
diff --git a/public/app/plugins/datasource/elasticsearch/partials/metricAgg.html b/public/app/plugins/datasource/elasticsearch/partials/metricAgg.html
index 09f48e487eb..fd487d52d3b 100644
--- a/public/app/plugins/datasource/elasticsearch/partials/metricAgg.html
+++ b/public/app/plugins/datasource/elasticsearch/partials/metricAgg.html
@@ -10,7 +10,7 @@
-
+
{{settingsLinkText}}
diff --git a/public/app/plugins/datasource/elasticsearch/query_builder.js b/public/app/plugins/datasource/elasticsearch/query_builder.js
index e388ad63fdb..5d1492640dd 100644
--- a/public/app/plugins/datasource/elasticsearch/query_builder.js
+++ b/public/app/plugins/datasource/elasticsearch/query_builder.js
@@ -167,36 +167,28 @@ function () {
continue;
}
- var metricAgg = {field: metric.field};
+ var aggField = {};
+ var metricAgg = null;
+ if (metric.type === 'moving_avg') {
+ var subBucket = metric.id + "_mavg";
+
+ var af = {};
+ af[metric.aggregation] = {field: metric.field};
+ nestedAggs.aggs[subBucket] = af;
+
+ metricAgg = { buckets_path: subBucket };
+ } else {
+ metricAgg = {field: metric.field};
+ }
+
for (var prop in metric.settings) {
if (metric.settings.hasOwnProperty(prop) && metric.settings[prop] !== null) {
metricAgg[prop] = metric.settings[prop];
}
}
- var aggField = {};
- if (metric.type === 'moving_avg') {
- var pipeAgg = '';
- for(var aggname in nestedAggs.aggs) {
- var agg = nestedAggs.aggs[aggname];
- for(prop in agg) {
- if (agg.hasOwnProperty(prop) && agg[prop] !== null) {
- if (metric.field === prop) {
- pipeAgg = aggname;
- break;
- }
- }
- }
- }
-
- if (pipeAgg !== '') {
- aggField[metric.type] = { buckets_path: pipeAgg };
- nestedAggs.aggs[metric.id] = aggField;
- }
- } else {
- aggField[metric.type] = metricAgg;
- nestedAggs.aggs[metric.id] = aggField;
- }
+ aggField[metric.type] = metricAgg;
+ nestedAggs.aggs[metric.id] = aggField;
}
return query;
diff --git a/public/app/plugins/datasource/elasticsearch/query_def.js b/public/app/plugins/datasource/elasticsearch/query_def.js
index 1f7d352a2cc..ec5141c1e8d 100644
--- a/public/app/plugins/datasource/elasticsearch/query_def.js
+++ b/public/app/plugins/datasource/elasticsearch/query_def.js
@@ -13,7 +13,7 @@ function (_) {
{text: "Min", value: 'min', requiresField: true},
{text: "Extended Stats", value: 'extended_stats', requiresField: true},
{text: "Percentiles", value: 'percentiles', requiresField: true},
- {text: "Moving Avg", value: 'moving_avg', requiresField: false, requiresBucketsPath: true},
+ {text: "Moving Avg", value: 'moving_avg', requiresField: true, requiresBucketsPath: true},
{text: "Unique Count", value: "cardinality", requiresField: true},
{text: "Raw Document", value: "raw_document", requiresField: false}
],
diff --git a/public/app/plugins/datasource/elasticsearch/specs/query_builder_specs.ts b/public/app/plugins/datasource/elasticsearch/specs/query_builder_specs.ts
index 931d9a3613e..0bda6ab73b1 100644
--- a/public/app/plugins/datasource/elasticsearch/specs/query_builder_specs.ts
+++ b/public/app/plugins/datasource/elasticsearch/specs/query_builder_specs.ts
@@ -158,15 +158,11 @@ describe('ElasticQueryBuilder', function() {
it('with moving average', function() {
var query = builder.build({
metrics: [
- {
- id: '1',
- type: 'sum',
- field: '@value',
- },
{
id: '2',
type: 'moving_avg',
- field: 'sum'
+ field: '@value',
+ aggregation: 'sum'
}
],
bucketAggs: [
@@ -175,8 +171,9 @@ describe('ElasticQueryBuilder', function() {
});
var firstLevel = query.aggs["3"];
+ console.log(JSON.stringify(query));
expect(firstLevel.aggs["2"]).not.to.be(undefined);
expect(firstLevel.aggs["2"].moving_avg).not.to.be(undefined);
- expect(firstLevel.aggs["2"].moving_avg.buckets_path).to.be("1");
+ expect(firstLevel.aggs["2"].moving_avg.buckets_path).to.be("99");
});
});