From bc5342787751ea61b548ea15e8ed9b7c0507e159 Mon Sep 17 00:00:00 2001 From: Spencer Alger Date: Fri, 6 Feb 2015 15:42:23 -0700 Subject: [PATCH 1/4] [timeBuckets/calcAutoInterval] return clones of our intervals, so they can't be mutated --- .../time_buckets/calc_auto_interval.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/kibana/components/time_buckets/calc_auto_interval.js b/src/kibana/components/time_buckets/calc_auto_interval.js index 71e16e4416a3..e80a62f850d8 100644 --- a/src/kibana/components/time_buckets/calc_auto_interval.js +++ b/src/kibana/components/time_buckets/calc_auto_interval.js @@ -28,22 +28,22 @@ define(function (require) { function find(rules, check, last) { return function (buckets, duration) { var target = duration / buckets; - var lastResp; + + var prev; + var resp; for (var i = 0; i < rules.length; i++) { var rule = rules[i]; - var resp = check(rule[0], rule[1], target); - if (resp == null) { - if (!last) continue; - if (lastResp) return lastResp; - break; - } + prev = resp; + resp = check(rule[0], rule[1], target); - if (!last) return resp; - lastResp = resp; + if (resp == null && !last) continue; + else break; } + if (last && !resp) resp = prev; + if (resp) return moment.duration().add(resp); return moment.duration(Math.floor(target), 'ms'); }; } From 67f09b5da502e659671a0a437aa6442215107d13 Mon Sep 17 00:00:00 2001 From: Spencer Alger Date: Fri, 6 Feb 2015 15:44:03 -0700 Subject: [PATCH 2/4] [vis] expose a #requesting() method for indicating transitions in vis state --- src/kibana/components/vis/_agg_config.js | 25 +++++++++++-------- src/kibana/components/vis/vis.js | 4 +++ .../plugins/discover/controllers/discover.js | 1 + src/kibana/plugins/visualize/editor/editor.js | 4 ++- .../saved_visualizations/_saved_vis.js | 1 + src/kibana/services/timefilter.js | 1 + 6 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/kibana/components/vis/_agg_config.js b/src/kibana/components/vis/_agg_config.js index c5c9082b4969..8478e789c9f6 100644 --- a/src/kibana/components/vis/_agg_config.js +++ b/src/kibana/components/vis/_agg_config.js @@ -174,6 +174,19 @@ define(function (require) { return this.type.createFilter(this, key); }; + /** + * Hook into param onRequest handling, and tell the aggConfig that it + * is being sent to elasticsearc. + * + * @return {[type]} [description] + */ + AggConfig.prototype.requesting = function () { + var self = this; + self.type.params.forEach(function (param) { + if (param.onRequest) param.onRequest(self); + }); + }; + /** * Convert this aggConfig to it's dsl syntax. * @@ -185,18 +198,10 @@ define(function (require) { */ AggConfig.prototype.toDsl = function () { if (this.type.hasNoDsl) return; - - var self = this; - self.type.params.forEach(function (param) { - if (param.onRequest) { - param.onRequest(self); - } - }); - - var output = self.write(); + var output = this.write(); var configDsl = {}; - configDsl[self.type.name] = output.params; + configDsl[this.type.name] = output.params; // if the config requires subAggs, write them to the dsl as well if (output.subAggs) { diff --git a/src/kibana/components/vis/vis.js b/src/kibana/components/vis/vis.js index e5abf47cd17c..04c27cd6dce5 100644 --- a/src/kibana/components/vis/vis.js +++ b/src/kibana/components/vis/vis.js @@ -90,6 +90,10 @@ define(function (require) { return new Vis(this.indexPattern, this.getState()); }; + Vis.prototype.requesting = function () { + _.invoke(this.aggs.getRequestAggs(), 'requesting'); + }; + Vis.prototype.isHierarchical = function () { if (_.isFunction(this.type.hierarchicalData)) { return !!this.type.hierarchicalData(this); diff --git a/src/kibana/plugins/discover/controllers/discover.js b/src/kibana/plugins/discover/controllers/discover.js index 4e633f070973..b6efc58cac6d 100644 --- a/src/kibana/plugins/discover/controllers/discover.js +++ b/src/kibana/plugins/discover/controllers/discover.js @@ -589,6 +589,7 @@ define(function (require) { }); $scope.searchSource.aggs(function () { + $scope.vis.requesting(); return $scope.vis.aggs.toDsl(); }); diff --git a/src/kibana/plugins/visualize/editor/editor.js b/src/kibana/plugins/visualize/editor/editor.js index fdaf0f87130d..d2716159f706 100644 --- a/src/kibana/plugins/visualize/editor/editor.js +++ b/src/kibana/plugins/visualize/editor/editor.js @@ -199,7 +199,9 @@ define(function (require) { $state.save(); searchSource.set('filter', $state.filters); if (!$state.linked) searchSource.set('query', $state.query); - if ($scope.vis.type.requiresSearch) courier.fetch(); + if ($scope.vis.type.requiresSearch) { + courier.fetch(); + } }; diff --git a/src/kibana/plugins/visualize/saved_visualizations/_saved_vis.js b/src/kibana/plugins/visualize/saved_visualizations/_saved_vis.js index bad341e79504..352e8cdca951 100644 --- a/src/kibana/plugins/visualize/saved_visualizations/_saved_vis.js +++ b/src/kibana/plugins/visualize/saved_visualizations/_saved_vis.js @@ -61,6 +61,7 @@ define(function (require) { }) .then(function (vis) { self.searchSource.aggs(function () { + self.vis.requesting(); return self.vis.aggs.toDsl(); }); diff --git a/src/kibana/services/timefilter.js b/src/kibana/services/timefilter.js index f674eedcbfe2..8777d562f09a 100644 --- a/src/kibana/services/timefilter.js +++ b/src/kibana/services/timefilter.js @@ -76,6 +76,7 @@ define(function (require) { lte: bounds.max.valueOf() }; } + return filter; }; From 964820d9bf567f7bde412ddfede6fddc234947fb Mon Sep 17 00:00:00 2001 From: Spencer Alger Date: Fri, 6 Feb 2015 15:45:05 -0700 Subject: [PATCH 3/4] [visualize/editor] proxy calls to vis.requesting to the editable vis --- src/kibana/plugins/visualize/editor/editor.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/kibana/plugins/visualize/editor/editor.js b/src/kibana/plugins/visualize/editor/editor.js index d2716159f706..bada0062ef3d 100644 --- a/src/kibana/plugins/visualize/editor/editor.js +++ b/src/kibana/plugins/visualize/editor/editor.js @@ -65,8 +65,15 @@ define(function (require) { }); var savedVis = $route.current.locals.savedVis; + var vis = savedVis.vis; var editableVis = vis.clone(); + vis.requesting = function () { + var requesting = editableVis.requesting; + requesting.call(vis); + requesting.call(editableVis); + }; + var searchSource = savedVis.searchSource; // config panel templates From d48762c06dffbeeb118a4d51e33eeafe254a21b4 Mon Sep 17 00:00:00 2001 From: Spencer Alger Date: Fri, 6 Feb 2015 16:29:48 -0700 Subject: [PATCH 4/4] [timeBuckets/calcAutoInterval] revert to previous logic, just clone return value --- .../time_buckets/calc_auto_interval.js | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/kibana/components/time_buckets/calc_auto_interval.js b/src/kibana/components/time_buckets/calc_auto_interval.js index e80a62f850d8..41e27cb0c02c 100644 --- a/src/kibana/components/time_buckets/calc_auto_interval.js +++ b/src/kibana/components/time_buckets/calc_auto_interval.js @@ -26,25 +26,30 @@ define(function (require) { var revRoundingRules = roundingRules.slice(0).reverse(); function find(rules, check, last) { - return function (buckets, duration) { + function pick(buckets, duration) { var target = duration / buckets; - - var prev; - var resp; + var lastResp; for (var i = 0; i < rules.length; i++) { var rule = rules[i]; + var resp = check(rule[0], rule[1], target); - prev = resp; - resp = check(rule[0], rule[1], target); + if (resp == null) { + if (!last) continue; + if (lastResp) return lastResp; + break; + } - if (resp == null && !last) continue; - else break; + if (!last) return resp; + lastResp = resp; } - if (last && !resp) resp = prev; - if (resp) return moment.duration().add(resp); return moment.duration(Math.floor(target), 'ms'); + } + + return function (buckets, duration) { + var interval = pick(buckets, duration); + if (interval) return moment.duration(interval._data); }; }