From b97e7845555a9097c62e0329166959b15685b74e Mon Sep 17 00:00:00 2001 From: Vaibhav Tandon Date: Wed, 4 Jan 2017 00:31:15 +0000 Subject: [PATCH] Moving average support for all models along with additional settings associated with each model --- .../datasource/elasticsearch/metric_agg.js | 26 ++++++++++++ .../elasticsearch/partials/metric_agg.html | 14 ++++++- .../datasource/elasticsearch/query_def.js | 42 ++++++++++++++++++- 3 files changed, 79 insertions(+), 3 deletions(-) diff --git a/public/app/plugins/datasource/elasticsearch/metric_agg.js b/public/app/plugins/datasource/elasticsearch/metric_agg.js index 845794d79f3..9971c084882 100644 --- a/public/app/plugins/datasource/elasticsearch/metric_agg.js +++ b/public/app/plugins/datasource/elasticsearch/metric_agg.js @@ -29,6 +29,7 @@ function (angular, _, queryDef) { $scope.metricAggTypes = queryDef.getMetricAggTypes($scope.esVersion); $scope.extendedStats = queryDef.extendedStats; $scope.pipelineAggOptions = []; + $scope.modelSettingsValues = {}; $scope.init = function() { $scope.agg = metricAggs[$scope.index]; @@ -95,6 +96,12 @@ function (angular, _, queryDef) { $scope.settingsLinkText = 'Stats: ' + stats.join(', '); break; } + case 'moving_avg': { + $scope.movingAvgModelTypes = queryDef.movingAvgModelOptions; + $scope.modelSettings = queryDef.getMovingAvgSettings($scope.agg.settings.model, true); + $scope.updateMovingAvgModelSettings(); + break; + } case 'raw_document': { $scope.target.metrics = [$scope.agg]; $scope.target.bucketAggs = []; @@ -127,6 +134,25 @@ function (angular, _, queryDef) { $scope.onChange(); }; + $scope.updateMovingAvgModelSettings = function () { + var modelSettingsKeys = []; + var modelSettings = queryDef.getMovingAvgSettings($scope.agg.settings.model, false); + for (var i=0; i < modelSettings.length; i++) { + modelSettingsKeys.push(modelSettings[i].value); + } + + for (var key in $scope.agg.settings.settings) { + if (($scope.agg.settings.settings[key] === null) || (modelSettingsKeys.indexOf(key) === -1)) { + delete $scope.agg.settings.settings[key]; + } + } + }; + + $scope.onChangeClearInternal = function() { + delete $scope.agg.settings.minimize; + $scope.onChange(); + }; + $scope.onTypeChange = function() { $scope.agg.settings = {}; $scope.agg.meta = {}; diff --git a/public/app/plugins/datasource/elasticsearch/partials/metric_agg.html b/public/app/plugins/datasource/elasticsearch/partials/metric_agg.html index 74cf23516cd..d1ef7756f84 100644 --- a/public/app/plugins/datasource/elasticsearch/partials/metric_agg.html +++ b/public/app/plugins/datasource/elasticsearch/partials/metric_agg.html @@ -50,14 +50,24 @@
- -
+ +
+ +
+ + +
+ + + + +
diff --git a/public/app/plugins/datasource/elasticsearch/query_def.js b/public/app/plugins/datasource/elasticsearch/query_def.js index 9fbfb3495d6..6ac996ba1b3 100644 --- a/public/app/plugins/datasource/elasticsearch/query_def.js +++ b/public/app/plugins/datasource/elasticsearch/query_def.js @@ -69,17 +69,44 @@ function (_) { {text: '1d', value: '1d'}, ], + movingAvgModelOptions: [ + {text: 'Simple', value: 'simple'}, + {text: 'Linear', value: 'linear'}, + {text: 'Exponentially Weighted', value: 'ewma'}, + {text: 'Holt Linear', value: 'holt'}, + {text: 'Holt Winters', value: 'holt_winters'}, + ], + pipelineOptions: { 'moving_avg' : [ {text: 'window', default: 5}, {text: 'model', default: 'simple'}, - {text: 'predict', default: 0} + {text: 'minimize', default: false}, + {text: 'predict', default: undefined} ], 'derivative': [ {text: 'unit', default: undefined}, ] }, + movingAvgModelSettings: { + 'simple' : [], + 'linear' : [], + 'ewma' : [ + {text: "Alpha", value: "alpha", default: undefined}], + 'holt' : [ + {text: "Alpha", value: "alpha", default: undefined}, + {text: "Beta", value: "beta", default: undefined}, + ], + 'holt_winters' : [ + {text: "Alpha", value: "alpha", default: undefined}, + {text: "Beta", value: "beta", default: undefined}, + {text: "Gamma", value: "gamma", default: undefined}, + {text: "Period", value: "period", default: undefined}, + {text: "Pad", value: "pad", default: undefined, isCheckbox: true}, + ], + }, + getMetricAggTypes: function(esVersion) { return _.filter(this.metricAggTypes, function(f) { if (f.minVersion) { @@ -119,6 +146,19 @@ function (_) { return result; }, + getMovingAvgSettings: function(model, filtered) { + var filteredResult = []; + if (filtered) { + _.each(this.movingAvgModelSettings[model], function(setting) { + if (!(setting.isCheckbox)) { + filteredResult.push(setting); + } + }); + return filteredResult; + } + return this.movingAvgModelSettings[model]; + }, + getOrderByOptions: function(target) { var self = this; var metricRefs = [];