Initial commit of search page - not finished yet

Project: http://git-wip-us.apache.org/repos/asf/incubator-blur/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-blur/commit/f96b0b6d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-blur/tree/f96b0b6d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-blur/diff/f96b0b6d

Branch: refs/heads/apache-blur-0.2
Commit: f96b0b6d9179337d3f65ef22c9b3ef5d69edf493
Parents: d2f498b
Author: Chris Rohr <[email protected]>
Authored: Tue Apr 15 20:33:58 2014 -0400
Committer: Chris Rohr <[email protected]>
Committed: Tue Apr 15 20:33:58 2014 -0400

----------------------------------------------------------------------
 contrib/blur-console/ui/app/index.html          |   1 +
 .../ui/app/scripts/blurconsole.model.js         |  79 +++++++++-
 .../ui/app/scripts/blurconsole.schema.js        |   7 +-
 .../ui/app/scripts/blurconsole.search.js        | 152 +++++++++++++++++++
 .../ui/app/scripts/blurconsole.shell.js         |   2 +-
 .../ui/app/scripts/blurconsole.utils.js         |   9 +-
 .../ui/app/views/dashboard.tpl.html             |  14 +-
 .../blur-console/ui/app/views/queries.tpl.html  |  10 +-
 .../blur-console/ui/app/views/search.tpl.html   |  44 ++++++
 9 files changed, 298 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/f96b0b6d/contrib/blur-console/ui/app/index.html
----------------------------------------------------------------------
diff --git a/contrib/blur-console/ui/app/index.html 
b/contrib/blur-console/ui/app/index.html
index 41a33a9..8757df1 100644
--- a/contrib/blur-console/ui/app/index.html
+++ b/contrib/blur-console/ui/app/index.html
@@ -106,6 +106,7 @@ under the License.
         <script src="scripts/blurconsole.dashboard.js"></script>
         <script src="scripts/blurconsole.tables.js"></script>
         <script src="scripts/blurconsole.queries.js"></script>
+        <script src="scripts/blurconsole.search.js"></script>
         <script src="scripts/blurconsole.schema.js"></script>
         <script src="scripts/blurconsole.data.js"></script>
         <script src="scripts/blurconsole.fake.js"></script>

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/f96b0b6d/contrib/blur-console/ui/app/scripts/blurconsole.model.js
----------------------------------------------------------------------
diff --git a/contrib/blur-console/ui/app/scripts/blurconsole.model.js 
b/contrib/blur-console/ui/app/scripts/blurconsole.model.js
index 6153bd9..f696506 100644
--- a/contrib/blur-console/ui/app/scripts/blurconsole.model.js
+++ b/contrib/blur-console/ui/app/scripts/blurconsole.model.js
@@ -31,10 +31,10 @@ blurconsole.model = (function() {
                        queries : {}
                },
                isFakeData = true,
-               tables, metrics, nodes, queries, initModule, nodePoller, 
tablePoller, queryPerformancePoller, queryPoller;
+               tables, metrics, nodes, queries, search, initModule, 
nodePoller, tablePoller, queryPerformancePoller, queryPoller;
 
        tables = (function() {
-               var getClusters, getEnabledTables, getDisabledTables, 
isDataLoaded, disableTable, enableTable, deleteTable, getSchema, findTerms;
+               var getClusters, getEnabledTables, getDisabledTables, 
isDataLoaded, disableTable, enableTable, deleteTable, getSchema, findTerms, 
getAllEnabledTables;
 
                getClusters = function() {
                        if (stateMap.tableNameMap === null) {
@@ -70,6 +70,16 @@ blurconsole.model = (function() {
                        return data;
                };
 
+               getAllEnabledTables = function() {
+                       var tableMap = {};
+
+                       $.each(getClusters(), function(c, cluster){
+                               tableMap[cluster] = getEnabledTables(cluster);
+                       });
+
+                       return tableMap;
+               };
+
                isDataLoaded = function() {
                        return stateMap.tableNameMap !== null;
                };
@@ -105,7 +115,8 @@ blurconsole.model = (function() {
                        enableTable : enableTable,
                        deleteTable : deleteTable,
                        getSchema : getSchema,
-                       findTerms : findTerms
+                       findTerms : findTerms,
+                       getAllEnabledTables : getAllEnabledTables
                };
        }());
 
@@ -338,6 +349,68 @@ blurconsole.model = (function() {
                };
        }());
 
+       search = (function() {
+               var results = {}, families = {}, currentQuery, currentTable, 
currentArgs = {start: 0, fetch: 10, rowRecordOption: 'rowrow', families: null},
+                       runSearch, getResults, getFamilies, loadMoreResults,
+                       sendSearch, processResults;
+
+               runSearch = function( query, table, searchArgs ) {
+                       currentQuery = query;
+                       currentTable = table;
+                       currentArgs = $.extend(currentArgs, searchArgs);
+                       sendSearch();
+               };
+
+               getResults = function() {
+                       return results;
+               };
+
+               getFamilies = function() {
+                       return families;
+               };
+
+               loadMoreResults = function(family, start, fetch) {
+                       currentArgs.start = start;
+                       currentArgs.fetch = fetch;
+                       currentArgs.families = [family];
+                       sendSearch();
+               };
+
+               sendSearch = function() {
+                       configMap.poller.sendSearch(currentQuery, currentTable, 
currentArgs, processResults);
+               };
+
+               processResults = function(data) {
+                       var dataFamilies, dataResults, tmpFamilies = {};
+
+                       dataFamilies = data.families;
+                       dataResults = data.results;
+
+                       if (dataFamilies !== null) {
+                               $.each(dataFamilies, function(f, family){
+                                       tmpFamilies[family] = false;
+                               });
+                       }
+
+                       if (dataResults !== null) {
+                               $.each(dataResults, function(family, 
resultList){
+                                       tmpFamilies[family] = true;
+                                       var tmpList = results[family] || [];
+                                       results[family] = 
tmpList.concat(resultList);
+                               });
+                       }
+                       families = tmpFamilies;
+                       $.gevent.publish('results-updated');
+               };
+
+               return {
+                       runSearch: runSearch,
+                       getResults: getResults,
+                       getFamilies: getFamilies,
+                       loadMoreResults: loadMoreResults
+               };
+       }());
+
        nodePoller = function() {
                var tmpNodeMap = configMap.poller.getNodeList();
                if (!blurconsole.utils.equals(tmpNodeMap, stateMap.nodeMap)) {

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/f96b0b6d/contrib/blur-console/ui/app/scripts/blurconsole.schema.js
----------------------------------------------------------------------
diff --git a/contrib/blur-console/ui/app/scripts/blurconsole.schema.js 
b/contrib/blur-console/ui/app/scripts/blurconsole.schema.js
index 8a0dfe5..15dec2b 100644
--- a/contrib/blur-console/ui/app/scripts/blurconsole.schema.js
+++ b/contrib/blur-console/ui/app/scripts/blurconsole.schema.js
@@ -16,6 +16,7 @@ software distributed under the License is distributed on an
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
+*/
 /*jshint laxbreak: true */
 /*global blurconsole:false */
 blurconsole.schema = (function () {
@@ -155,7 +156,7 @@ blurconsole.schema = (function () {
                var terms = Array.prototype.slice.call(arguments, 1);
                jqueryMap.termList.html('');
                $.each(terms, function(i, term){
-                       jqueryMap.termList.append('<li 
class="list-group-item">' + term + ' <span class="badge badge-success 
searchTrigger" title="Search for this value" data-value="' + term + '"><i 
class="glyphicon glyphicon-search"></i></span></li>');
+                       jqueryMap.termList.append('<li 
class="list-group-item">' + term + ' <span class="badge badge-success 
searchTrigger" title="Search for this value" data-value="' + term + '" 
data-table="' + stateMap.table + '"><i class="glyphicon 
glyphicon-search"></i></span></li>');
                });
        };
 
@@ -163,9 +164,11 @@ blurconsole.schema = (function () {
                blurconsole.shell.changeAnchorPart({
                        tab: 'search',
                        _tab: {
-                               query: stateMap.termFamily + '.' + 
stateMap.termColumn + ':' + $(this).data('value')
+                               query: encodeURIComponent(stateMap.termFamily + 
'.' + stateMap.termColumn + ':' + $(this).data('value')),
+                               table: $(this).data('table')
                        }
                });
+               jqueryMap.modal.modal('hide');
        };
 
        initModule = function() {

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/f96b0b6d/contrib/blur-console/ui/app/scripts/blurconsole.search.js
----------------------------------------------------------------------
diff --git a/contrib/blur-console/ui/app/scripts/blurconsole.search.js 
b/contrib/blur-console/ui/app/scripts/blurconsole.search.js
new file mode 100644
index 0000000..3521fcd
--- /dev/null
+++ b/contrib/blur-console/ui/app/scripts/blurconsole.search.js
@@ -0,0 +1,152 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+*/
+/*global blurconsole:false */
+blurconsole.search = (function () {
+       'use strict';
+       var configMap = {
+               view : 'views/search.tpl.html'
+       },
+       stateMap = {
+               $container : null,
+               $currentTable : null,
+               $currentQuery : null,
+               $schemaForCurrentTable : null,
+               $start : 0,
+               $fetch : 10,
+               $filter : null,
+               $rowRecordOption : 'rowrow'
+       },
+       jqueryMap = {},
+       setJqueryMap, initModule, unloadModule, drawResults, 
registerPageEvents, unregisterPageEvents, sendSearch, showOptions, 
reviewTables, loadTableList;
+
+       setJqueryMap = function() {
+               var $container = stateMap.$container;
+               jqueryMap = {
+                       $container : $container,
+                       $queryField : $('#queryField'),
+                       $tableField : $('#tableChooser'),
+                       $tableSelectorStatusOption : $('#statusOption'),
+                       $tableWarning : $('#tableGoneWarning')
+               };
+       };
+
+       registerPageEvents = function() {
+               $('#searchTrigger').on('click', sendSearch);
+               $('#searchOptionsTrigger').on('click', showOptions);
+       };
+
+       unregisterPageEvents = function() {
+               $('#searchTrigger').off('click');
+               $('#searchOptionsTrigger').off('click');
+       };
+
+       sendSearch = function() {
+               // Save options
+               stateMap.currentTable = jqueryMap.$tableField.val();
+               stateMap.currentQuery = jqueryMap.$queryField.val();
+
+               blurconsole.shell.changeAnchorPart({
+                       tab: 'search',
+                       _tab: {
+                               query: 
encodeURIComponent(stateMap.currentQuery),
+                               table: stateMap.currentTable
+                       }
+               });
+
+               blurconsole.model.search.runSearch(stateMap.currentQuery, 
stateMap.currentTable, {start: 0, fetch: 10});
+       };
+
+       showOptions = function() {
+
+       };
+
+       reviewTables = function() {
+               var tableFound = false, tableMap;
+
+               if (stateMap.currentTable) {
+                       tableMap = 
blurconsole.model.tables.getAllEnabledTables();
+                       $.each(tableMap, function(cluster, tables){
+                               var tableList = $.map(tables, function(t){ 
return t.name; });
+                               if (tableList.indexOf(stateMap.currentTable) > 
-1) {
+                                       tableFound = true;
+                               }
+                       });
+               }
+
+               if (tableFound) {
+                       jqueryMap.$tableWarning.hide();
+                       loadTableList();
+               } else {
+                       jqueryMap.$tableWarning.show();
+               }
+       };
+
+       drawResults = function() {
+
+       };
+
+       loadTableList = function() {
+               var tableMap = blurconsole.model.tables.getAllEnabledTables();
+
+               jqueryMap.$tableSelectorStatusOption.html('Loading Tables...');
+               jqueryMap.$tableField.find('optgroup').remove();
+
+               $.each(tableMap, function(cluster, tables) {
+                       var optGroupString;
+
+                       optGroupString = '<optgroup label="' + cluster + '">';
+                       $.each(tables, function(t, table){
+                               optGroupString += '<option value="' + 
table.name + '"' + (table.name === stateMap.currentTable ? ' selected' : '') + 
'>' + table.name + '</option>';
+                       });
+                       optGroupString += '</optgroup>';
+                       jqueryMap.$tableField.append(optGroupString);
+               });
+
+               jqueryMap.$tableSelectorStatusOption.html('Choose Table');
+       };
+
+       initModule = function($container) {
+               $container.load(configMap.view, function() {
+                       stateMap.$container = $container;
+                       setJqueryMap();
+                       $.gevent.subscribe(jqueryMap.$container, 
'tables-updated', reviewTables);
+                       registerPageEvents();
+                       loadTableList();
+
+                       var startupMap = $.uriAnchor.makeAnchorMap();
+
+                       stateMap.currentQuery = startupMap._tab.query;
+                       jqueryMap.$queryField.val(stateMap.currentQuery);
+                       stateMap.currentTable = startupMap._tab.table;
+                       jqueryMap.$tableField.val(stateMap.currentTable);
+
+               });
+               return true;
+       };
+
+       unloadModule = function() {
+               $.gevent.unsubscribe(jqueryMap.$container, 'tables-updated');
+               unregisterPageEvents();
+       };
+
+       return {
+               initModule : initModule,
+               unloadModule : unloadModule
+       };
+}());
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/f96b0b6d/contrib/blur-console/ui/app/scripts/blurconsole.shell.js
----------------------------------------------------------------------
diff --git a/contrib/blur-console/ui/app/scripts/blurconsole.shell.js 
b/contrib/blur-console/ui/app/scripts/blurconsole.shell.js
index 055018e..de8f327 100644
--- a/contrib/blur-console/ui/app/scripts/blurconsole.shell.js
+++ b/contrib/blur-console/ui/app/scripts/blurconsole.shell.js
@@ -28,7 +28,7 @@ blurconsole.shell = (function () {
        var configMap = {
                anchorSchemaMap : {
                        tab : { dashboard : true, tables : true, queries : 
true, search : true },
-                       _tab : { query: true }
+                       _tab : { query: true, table: true }
                },
                defaultTab : 'dashboard',
                allTabs : ['dashboard', 'tables', 'queries', 'search']

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/f96b0b6d/contrib/blur-console/ui/app/scripts/blurconsole.utils.js
----------------------------------------------------------------------
diff --git a/contrib/blur-console/ui/app/scripts/blurconsole.utils.js 
b/contrib/blur-console/ui/app/scripts/blurconsole.utils.js
index 0154e65..028fc36 100644
--- a/contrib/blur-console/ui/app/scripts/blurconsole.utils.js
+++ b/contrib/blur-console/ui/app/scripts/blurconsole.utils.js
@@ -20,7 +20,7 @@ under the License.
 /*global blurconsole:false */
 blurconsole.utils = (function(){
        'use strict';
-       var inject, unique, equals;
+       var inject, unique, equals, findFamilies;
 
        inject = function(collection, initial, block) {
                if (collection === null || collection.length === 0) {
@@ -55,10 +55,15 @@ blurconsole.utils = (function(){
                return JSON.stringify(obj1) === JSON.stringify(obj2);
        };
 
+       findFamilies = function(query) {
+               // Determine regex to find column families in lucene query
+       };
+
        return {
                inject: inject,
                reduce: inject,
                unique: unique,
-               equals: equals
+               equals: equals,
+               findFamilies: findFamilies
        };
 }());
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/f96b0b6d/contrib/blur-console/ui/app/views/dashboard.tpl.html
----------------------------------------------------------------------
diff --git a/contrib/blur-console/ui/app/views/dashboard.tpl.html 
b/contrib/blur-console/ui/app/views/dashboard.tpl.html
index c4f8e57..b805455 100644
--- a/contrib/blur-console/ui/app/views/dashboard.tpl.html
+++ b/contrib/blur-console/ui/app/views/dashboard.tpl.html
@@ -24,35 +24,35 @@ under the License.
 </div>
 
 <div class="row">
-       <div class="col-md-8">
+       <div class="col-sm-8">
                <div class="row">
-                       <div class="col-md-6 text-center">
+                       <div class="col-sm-6 text-center">
                                        <h4>Zookeepers <small><i 
class="glyphicon glyphicon-retweet swapper-trigger" title="Swap 
Chart/Info"></i></small></h4>
                                        <div id="zookeeperNodes" 
class="simple-chart swapper-chart"><img src="images/ajax-loader.gif"></div>
                                        <div id="zookeeperInfo" 
class="swapper-info hidden"></div>
                        </div>
-                       <div class="col-md-6 text-center">
+                       <div class="col-sm-6 text-center">
                                <h4>Controllers <small><i class="glyphicon 
glyphicon-retweet swapper-trigger" title="Swap Chart/Info"></i></small></h4>
                                <div id="controllerNodes" class="simple-chart 
swapper-chart"><img src="images/ajax-loader.gif"></div>
                                <div id="controllerInfo" class="swapper-info 
hidden"></div>
                        </div>
                </div>
                <div class="row">
-                       <div class="col-md-12 text-center">
+                       <div class="col-sm-12 text-center">
                                <h4>Query Load</h4>
                                <div id="queryLoad" class="wide-chart"><img 
src="images/ajax-loader.gif"></div>
                        </div>
                </div>
        </div>
-       <div class="col-md-4">
+       <div class="col-sm-4">
                <div class="row">
-                       <div class="col-md-12 text-center">
+                       <div class="col-sm-12 text-center">
                                <h4>Shards</h4>
                                <div id="shardNodes"><img 
src="images/ajax-loader.gif"></div>
                        </div>
                </div>
                <div class="row">
-                       <div class="col-md-12 text-center">
+                       <div class="col-sm-12 text-center">
                                <h4>Tables</h4>
                                <div id="tableCounts" class="simple-chart"><img 
src="images/ajax-loader.gif"></div>
                        </div>

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/f96b0b6d/contrib/blur-console/ui/app/views/queries.tpl.html
----------------------------------------------------------------------
diff --git a/contrib/blur-console/ui/app/views/queries.tpl.html 
b/contrib/blur-console/ui/app/views/queries.tpl.html
index 1667e64..cda6d89 100644
--- a/contrib/blur-console/ui/app/views/queries.tpl.html
+++ b/contrib/blur-console/ui/app/views/queries.tpl.html
@@ -18,20 +18,20 @@ specific language governing permissions and limitations
 under the License.
  -->
 <div class="row">
-       <div id="tableHolder" class="col-md-4">
+       <div id="tableHolder" class="col-sm-4">
 
        </div>
-       <div class="col-md-8">
+       <div class="col-sm-8">
                <div class="row">
-                       <div id="filterOptions" class="col-md-12">
-                               <div class="input-group col-md-4 pull-right">
+                       <div id="filterOptions" class="col-sm-12">
+                               <div class="input-group col-sm-4 pull-right">
                                        <input class="form-control filterText" 
placeholder="Filter" type="text">
                                        <span class="input-group-btn">
                                                <button class="btn btn-default 
filterTrigger" type="button">Go!</button>
                                        </span>
                                </div>
                        </div>
-                       <div id="queryHolder" class="col-md-12">
+                       <div id="queryHolder" class="col-sm-12">
 
                        </div>
                </div>

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/f96b0b6d/contrib/blur-console/ui/app/views/search.tpl.html
----------------------------------------------------------------------
diff --git a/contrib/blur-console/ui/app/views/search.tpl.html 
b/contrib/blur-console/ui/app/views/search.tpl.html
new file mode 100644
index 0000000..07e684e
--- /dev/null
+++ b/contrib/blur-console/ui/app/views/search.tpl.html
@@ -0,0 +1,44 @@
+<!--
+
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+ -->
+
+<div id="tableGoneWarning" class="alert alert-warning" 
style="display:none"><strong>Heads Up!</strong> The table that is currently 
being used for search is no longer enabled!</div>
+<div class="well">
+       <div class="container-fluid">
+               <div class="col-xs-6">
+                       <div class="input-group">
+                               <input type="text" class="form-control" 
placeholder="Query" id="queryField">
+                               <span class="input-group-btn">
+                               <button class="btn btn-default" type="button" 
id="searchTrigger">Go!</button>
+                       </span>
+                       </div>
+               </div>
+               <div class="col-xs-2">
+                       <select class="form-control" id="tableChooser">
+                               <option value="" id="statusOption">Loading 
Tables....</option>
+                       </select>
+               </div>
+               <button class="btn btn-default" type="button" 
id="searchOptionsTrigger">
+                       <i class="glyphicon glyphicon-cog"></i>
+               </button>
+       </div>
+</div>
+<div id="results">
+
+</div>
\ No newline at end of file

Reply via email to