From 3e459986b9b7030d2e2a21b8296180940353cb9b Mon Sep 17 00:00:00 2001 From: Spencer Alger Date: Wed, 16 Apr 2014 17:37:56 -0700 Subject: [PATCH] savedVis class now loads parent savedSearch objects properly, and uses the hits.total rather than global agg's bucket count --- .../apps/visualize/controllers/editor.js | 51 +++++-------------- .../apps/visualize/controllers/wizard.js | 6 +-- .../saved_visualizations/_build_chart_data.js | 13 +++-- .../saved_visualizations/_saved_vis.js | 21 +++++--- src/kibana/utils/config_template.js | 7 +++ 5 files changed, 44 insertions(+), 54 deletions(-) diff --git a/src/kibana/apps/visualize/controllers/editor.js b/src/kibana/apps/visualize/controllers/editor.js index b61e5b3ed7d06c..38baebfbb7134b 100644 --- a/src/kibana/apps/visualize/controllers/editor.js +++ b/src/kibana/apps/visualize/controllers/editor.js @@ -68,55 +68,27 @@ define(function (require) { var updateDataSource = function () { notify.event('update data source'); - // get the config objects form the visualization - var config = vis.getConfig(); - - // group the segments by their categoryName, but merge the segments and groups - config = _.groupBy(config, function (config) { - switch (config.categoryName) { - case 'group': - case 'segment': - return 'dimension'; - default: - return config.categoryName; - } - }); - - // use the global aggregation if we don't have any dimensions - if (!config.dimension) { - config.dimension = [{ - agg: 'global', - aggParams: {} - }]; - } - // stores the config objects in queryDsl var dsl = {}; // counter to ensure unique agg names var i = 0; + // start at the root, but the current will move + var current = dsl; // continue to nest the aggs under each other // writes to the dsl object - var nest = (function () { - var current = dsl; - return function (config) { - current.aggs = {}; - var key = '_agg_' + (i++); - - var aggDsl = {}; - aggDsl[config.agg] = config.aggParams; + vis.getConfig().forEach(function (config) { + current.aggs = {}; + var key = '_agg_' + (i++); - current = current.aggs[key] = aggDsl; - }; - }()); + var aggDsl = {}; + aggDsl[config.agg] = config.aggParams; - // nest each config type in order - config.split && config.split.forEach(nest); - config.dimension && config.dimension.forEach(nest); - config.metric && config.metric.forEach(nest); + current = current.aggs[key] = aggDsl; + }); // set the dsl to the searchSource - vis.searchSource.aggs(dsl.aggs); + vis.searchSource.aggs(dsl.aggs || {}); notify.event('update data source', true); }; @@ -146,7 +118,8 @@ define(function (require) { vis.save() .then(function () { - $location.url('/visualize/' + vis.typeName + '/' + vis.id); + $location.url('/visualize/edit/' + vis.id); + configTemplate.close('save'); }, notify.fatal); }; diff --git a/src/kibana/apps/visualize/controllers/wizard.js b/src/kibana/apps/visualize/controllers/wizard.js index dc841aa4b4db0a..c990afdeaca2ec 100644 --- a/src/kibana/apps/visualize/controllers/wizard.js +++ b/src/kibana/apps/visualize/controllers/wizard.js @@ -30,12 +30,12 @@ define(function (require) { app.controller('VisualizeWizardStep1', function ($route, $scope, courier, config, $location, indexPatterns) { $scope.step2WithSearchUrl = function (hit) { - return '#/visualize/step/2?savedSearch=' + encodeURIComponent(hit.id); + return '#/visualize/step/2?savedSearchId=' + encodeURIComponent(hit.id); }; $scope.indexPattern = { selection: null, - list: $route.current.params.indexPatternIds + list: $route.current.locals.indexPatternIds }; $scope.$watch('indexPattern.selection', function (pattern) { @@ -52,7 +52,7 @@ define(function (require) { }); app.controller('VisualizeWizardStep2', function ($scope, $route, $location) { - var existing = _.pick($route.current.params, 'indexPattern', 'savedSearch'); + var existing = _.pick($route.current.params, 'indexPattern', 'savedSearchId'); $scope.visTypeDefs = typeDefs; $scope.typeUrl = function (type) { diff --git a/src/kibana/apps/visualize/saved_visualizations/_build_chart_data.js b/src/kibana/apps/visualize/saved_visualizations/_build_chart_data.js index 402af7eedd994d..2304cf269c84d5 100644 --- a/src/kibana/apps/visualize/saved_visualizations/_build_chart_data.js +++ b/src/kibana/apps/visualize/saved_visualizations/_build_chart_data.js @@ -152,14 +152,17 @@ define(function (require) { }; if (resp.aggregations) { - if (!configs.length) { - configs.push({ + splitAndFlatten(chartData, resp.aggregations); + } else { + chartData.rows = []; + chartData.columns = [ + { categoryName: 'metric', agg: aggs.byName.count.name, label: aggs.byName.count.display - }); - } - splitAndFlatten(chartData, resp.aggregations); + } + ]; + writeRow(chartData.rows, { value: resp.hits.total }); } // flattening the chart does not always result in a split, diff --git a/src/kibana/apps/visualize/saved_visualizations/_saved_vis.js b/src/kibana/apps/visualize/saved_visualizations/_saved_vis.js index e4c8e3927024a2..708d1ca977a691 100644 --- a/src/kibana/apps/visualize/saved_visualizations/_saved_vis.js +++ b/src/kibana/apps/visualize/saved_visualizations/_saved_vis.js @@ -31,17 +31,18 @@ define(function (require) { mapping: { title: 'string', - description: 'string', - stateJSON: 'string', - savedSearchId: 'string', typeName: 'string', + stateJSON: 'string', + description: 'string', + savedSearchId: 'string' }, defaults: { title: '', - description: '', - stateJSON: '{}', typeName: opts.type, + stateJSON: '{}', + description: '', + savedSearchId: opts.savedSearchId, }, searchSource: true, @@ -54,8 +55,14 @@ define(function (require) { // set the state on the vis vis.setState(state); + + // default parent is the rootSearch, mimic the + // searchSource prop from saved objects + var parent = { + searchSource: rootSearch + }; + // set/get the parent savedSearch - var parent = rootSearch; if (vis.savedSearchId) { if (!vis.savedSearch || vis.savedSearch.id !== vis.savedSearchId) { // returns a promise @@ -69,7 +76,7 @@ define(function (require) { vis.savedSearch = parent; vis.searchSource - .inherits(vis.savedSearch) + .inherits(parent.searchSource) .size(0); vis._fillConfigsToMinimum(); diff --git a/src/kibana/utils/config_template.js b/src/kibana/utils/config_template.js index 7897d0bff86c9b..44cec3cc0221a6 100644 --- a/src/kibana/utils/config_template.js +++ b/src/kibana/utils/config_template.js @@ -14,6 +14,13 @@ define(function (require) { } }; + this.close = function (name) { + var toClose = templates[name]; + if (this.current === toClose) { + this.current = null; + } + }; + this.toString = function () { return this.current; };