Prechádzať zdrojové kódy

feat(elasticsearch): improve pipeline aggs structure

carl bergquist 10 rokov pred
rodič
commit
c8c9e0a7e7

+ 5 - 4
public/app/plugins/datasource/elasticsearch/metric_agg.js

@@ -13,15 +13,12 @@ function (angular, _, queryDef) {
 
     $scope.metricAggTypes = queryDef.metricAggTypes;
     $scope.extendedStats = queryDef.extendedStats;
-    $scope.pipelineSettings = [];
-
     $scope.pipelineAggOptions = [];
 
     $scope.init = function() {
       $scope.agg = metricAggs[$scope.index];
       $scope.validateModel();
       $scope.updatePipelineAggOptions();
-      $scope.pipelineSettings = queryDef.getPipelineSettings($scope.agg);
     };
 
     $scope.updatePipelineAggOptions = function() {
@@ -44,7 +41,11 @@ function (angular, _, queryDef) {
         $scope.agg.pipelineAgg = $scope.agg.pipelineAgg || 'select metric';
         $scope.agg.field = $scope.agg.pipelineAgg;
         $scope.settingsLinkText = 'Options';
-        delete $scope.agg.field;
+
+        _.each(queryDef.getPipelineOptions($scope.agg), function(opt) {
+          $scope.agg.settings[opt.text] = $scope.agg.settings[opt.text] || opt.default;
+        });
+
       } else if (!$scope.agg.field) {
         $scope.agg.field = 'select field';
       }

+ 12 - 14
public/app/plugins/datasource/elasticsearch/partials/metricAgg.html

@@ -34,9 +34,9 @@
 
 <div class="tight-form" ng-if="showOptions">
 	<div class="tight-form-inner-box">
-		<div class="tight-form last" ng-if="agg.pipelineAgg !== undefined">
+		<div class="tight-form first" ng-if="agg.pipelineAgg !== undefined">
 			<ul class="tight-form-list">
-				<li class="tight-form-item">
+				<li class="tight-form-item" style="width: 75px;">
 					Based on
 				</li>
 				<li>
@@ -45,18 +45,16 @@
 			</ul>
 			<div class="clearfix"></div>
 		</div>
-		<div ng-if="agg.pipelineAgg !== undefined">
-			<div class="tight-form" ng-repeat="setting in agg.pipelineSettings">
-				<ul class="tight-form-list">
-					<li class="tight-form-item" style="width: 100px">
-						{{stat.text}}
-					</li>
-					<li class="tight-form-item last">
-						<editor-checkbox text="" model="agg.meta.{{stat.value}}" change="onChange()"></editor-checkbox>
-					</li>
-				</ul>
-				<div class="clearfix"></div>
-			</div>
+		<div class="tight-form last" ng-if="agg.settings.window !== undefined">
+			<ul class="tight-form-list">
+				<li class="tight-form-item" style="width: 75px;">
+					Window
+				</li>
+				<li>
+					<input type="number" class="input-medium tight-form-input" ng-change="onChangeInternal()" ng-model="agg.settings.window" blur="onChange()" spellcheck='false'>
+				</li>
+			</ul>
+			<div class="clearfix"></div>
 		</div>
 		<div class="tight-form last" ng-if="agg.type === 'percentiles'">
 			<ul class="tight-form-list">

+ 9 - 8
public/app/plugins/datasource/elasticsearch/query_def.js

@@ -68,24 +68,25 @@ function (_) {
       {text: '1d', value: '1d'},
     ],
 
-    pipelineAggs: ['moving_avg', 'derivative'],
-
-    pipelineSettings: {
-      'moving_avg' : ['model', 'gap_policy', 'window', 'minimize'],
+    pipelineOptions: {
+      'moving_avg' : [
+        {text: 'window', default: 5}
+      ],
       'derivative': []
     },
 
-    getPipelineSettings: function(metric) {
-      if (this.isPipelineAgg(metric) === false) {
+    getPipelineOptions: function(metric) {
+      if (!this.isPipelineAgg(metric)) {
         return [];
       }
 
-      return this.pipelineSettings[metric.type];
+      return this.pipelineOptions[metric.type];
     },
 
     isPipelineAgg: function(metric) {
       if (metric.type) {
-        return this.pipelineAggs.indexOf(metric.type) > -1;
+        var po = this.pipelineOptions[metric.type];
+        return po !== null && po !== undefined;
       }
 
       return false;