incubator-blur-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From cr...@apache.org
Subject [48/53] [partial] Initial commit of console v2. Sorry for the large commit
Date Mon, 17 Feb 2014 16:07:24 GMT
http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/blur_table/terms_view.jst.ejs
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/blur_table/terms_view.jst.ejs b/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/blur_table/terms_view.jst.ejs
new file mode 100644
index 0000000..03bb946
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/blur_table/terms_view.jst.ejs
@@ -0,0 +1,29 @@
+<!--
+    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="new-popover-search" class="form-search" table_id="<%= table_id %>" family_name="<%= family %>" column_name="<%= column %>">
+  <input type="search" class="term-search span2" placeholder="Search..."/>
+  <a class="btn btn-primary term-search-btn">Search</a>
+</div>
+<ul class="terms-list well">
+  <%= JST['templates/blur_table/terms_list']({terms: terms}) %>
+</ul>
+<div class="more-terms btn-group">
+  <a href="#" class="more-terms-btn btn btn-primary">More...</a>
+  <a href="#" class="reset-terms btn"><i class="icon-refresh"></i></a>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/dashboard/hdfs.jst.ejs
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/dashboard/hdfs.jst.ejs b/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/dashboard/hdfs.jst.ejs
new file mode 100644
index 0000000..19acf33
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/dashboard/hdfs.jst.ejs
@@ -0,0 +1,59 @@
+<!--
+    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.
+-->
+<% var stats = hdfs.get('most_recent_stats'); %>
+<div class="hdfs-title label">
+  <% if(hdfs.get('recent_stats')) { %>
+    <img src="/assets/online.png" title="HDFS Stats are current"/>
+  <% } else { %>
+    <img src="/assets/offline.png" title="HDFS Stats are haven't been updated in over a minute"/>
+  <% } %>
+  <span>
+    <%= hdfs.get('name') %>
+  </span>
+  <span class="title-subtle"><%= hdfs.get('host') %></span>
+</div>
+<div class="hdfs-body">
+	<% if (stats === null) { %>
+		<table>
+			<tr>
+				<td>Unable to retrieve stats.</td>
+			</tr>
+		</table>
+	<% } else { %>
+	  <table>
+	    <tr>
+	      <td class="hdfs-chart-container">
+					<div class="zk-cont-info">
+						<h6 class="<%= stats.missing_blocks === 0 ? '' : 'error-label'%>">Missing Blocks ( <%= stats.missing_blocks %> )</h6>
+						<h6 class="<%= stats.under_replicated === 0 ? '' : 'error-label'%>">Under-Replicated Blocks ( <%= stats.under_replicated %> )</h6>
+	      </td>
+	      <td class="hdfs-bar-container">
+	        <div class="hdfs-live progress progress-status <% if(stats.total_nodes < 1){ %>faded-bar<% }else{ %>red-bar<% } %>">
+	          <div class="bar green-bar" style="width:<%= hdfs.node_width() %>%"></div>
+	        </div>
+	        <%= stats.live_nodes %> out of <%= stats.total_nodes %> live nodes<br /><br />
+	        <div class="hdfs-dfs progress progress-status faded-bar">
+	          <div class="bar <% if(hdfs.usage_width()<70){ %>green-bar<% }else if(hdfs.usage_width()<90){ %>yellow-bar<% }else{ %>red-bar<% } %>" style="width:<%= hdfs.usage_width() %>%"></div>
+	        </div>
+	        <%= hdfs.percent_used() %> dfs usage
+	      </td>
+	    </tr>
+	  </table>
+	<% } %>
+</div>

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/dashboard/long_running.jst.ejs
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/dashboard/long_running.jst.ejs b/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/dashboard/long_running.jst.ejs
new file mode 100644
index 0000000..0fbe4c5
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/dashboard/long_running.jst.ejs
@@ -0,0 +1,26 @@
+<!--
+    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.
+-->
+<% _.each(data, function(datum){ %>
+  <li class="long-running-entry">
+    <div class="icon" title="Cancel This Query" data-id="<%= datum.id %>">
+      <i class="icon-remove"/></div><div class="info">
+      <%= 'User Id: ' + datum.userid + ' | Query: ' + datum.query %>
+    </div>
+  </li>
+<% }); %>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/dashboard/zookeeper.jst.ejs
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/dashboard/zookeeper.jst.ejs b/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/dashboard/zookeeper.jst.ejs
new file mode 100644
index 0000000..9dac1d4
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/dashboard/zookeeper.jst.ejs
@@ -0,0 +1,73 @@
+<!--
+    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 class="zookeeper-title label">
+  <%= zookeeper.status_image() %>
+  <span>
+    <%= zookeeper.get('name') %>
+  </span>
+</div>
+<div class="zookeeper-body">
+  <table>
+    <tr>
+      <td class="zk-chart">
+        <div class="cont-chart"></div>
+        <div class="chart-title-text">Controllers</div>
+      </td>
+      <td class="zookeeper-cont-info">
+        <div class="zk-cont-info">
+          <h6><%= zookeeper.get('controller_total') - zookeeper.get('controller_offline_node') %> Online<br /></h6>
+          <h6><%= zookeeper.get('controller_offline_node') %> Offline<br /></h6>
+          <% if(zookeeper.consistent_controller_versions()){ %>
+            <h6 title="Consistent Blur Versions">Version <i class="icon-ok"></i></h6>
+          <% } else { %>
+            <h6 class="error-label" title="Inconsistent Blur Versions">Version <i class="icon-remove"></i></h6>
+          <% } %>
+        </div>
+      </td>
+      <td class="zookeeper-shard-info">
+        <div class="zk-shard-info">
+          <h6><%= zookeeper.get('shard_total') - zookeeper.get('shard_offline_node') %> Online<br /></h6>
+          <h6><%= zookeeper.get('shard_offline_node') %> Offline<br /></h6>
+          <% if(zookeeper.consistent_shard_versions()){ %>
+            <h6 title="Consistent Blur Versions">Version <i class="icon-ok"></i></h6>
+          <% } else { %>
+            <h6 class="error-label" title="Inconsistent Blur Versions">Version <i class="icon-remove"></i></h6>
+          <% } %>
+        </div>
+      </td>
+      <td class="zk-chart">
+        <div class="shard-chart"></div>
+        <div class="chart-title-text">Shards</div>
+      </td>
+    </tr>
+    <% if(zookeeper.get('long_running_queries') > 0){ %>
+      <tr>
+        <td colspan="4">
+          <div class="query-warning">
+            <% if(zookeeper.get('long_running_queries') === 1){ %>
+              1 query has been running for more than a minute!
+            <% } else { %>
+              <%= zookeeper.get('long_running_queries') %> queries have been running for more than a minute!
+            <% } %>
+          </div>
+        </td>
+      </tr>
+    <% } %>
+  </table>
+</div>

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/environment/cluster.jst.ejs
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/environment/cluster.jst.ejs b/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/environment/cluster.jst.ejs
new file mode 100644
index 0000000..917749b
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/environment/cluster.jst.ejs
@@ -0,0 +1,31 @@
+<!--
+    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.
+-->
+<td><%= cluster.get('name') %>
+ <i class="icon-exclamation-sign queries-running-icon" title="Has been queried within last 5 minutes" style="<% if (!cluster.get('cluster_queried')) { %><%= 'display:none' %><% } %>"></i>
+ </td>
+<td><%= cluster.get('shard_blur_version') %></td>
+<td><%= cluster.safe_mode() %></td>
+<td>
+  <a class="more-shard-info">
+    <%= cluster.get('shard_status') %>
+  </a>
+</td>
+<td>
+  <i class="icon-remove-sign destroy-cluster confirm-action" title="Remove This Cluster" />
+</td>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/environment/controller.jst.ejs
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/environment/controller.jst.ejs b/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/environment/controller.jst.ejs
new file mode 100644
index 0000000..422c573
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/environment/controller.jst.ejs
@@ -0,0 +1,25 @@
+<!--
+    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.
+-->
+<td><%= controller.get('node_name') %></td>
+<td><%= controller.get('blur_version') %></td>
+<td>
+  <% if(controller.get('controller_status') == 0){ %>
+    <i class="icon-remove-sign icon-white destroy-controller confirm-action" title="Remove This Controller" />
+  <% } %>
+</td>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/environment/shard.jst.ejs
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/environment/shard.jst.ejs b/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/environment/shard.jst.ejs
new file mode 100644
index 0000000..16b3401
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/environment/shard.jst.ejs
@@ -0,0 +1,26 @@
+<!--
+    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.
+-->
+<% if (shard.get('shard_status') == 0){%>
+  <div class="icon" title="Remove This Shard" data-id="<%= shard.get('id') %>">
+    <i class="icon-remove-sign"/>
+  </div>
+<% } %>
+<div class="info">
+  <%= shard.status() %>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/environment/zookeeper.jst.ejs
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/environment/zookeeper.jst.ejs b/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/environment/zookeeper.jst.ejs
new file mode 100644
index 0000000..ae8b2c8
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/javascripts/templates/environment/zookeeper.jst.ejs
@@ -0,0 +1,39 @@
+<!--
+    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.
+-->
+<h2 class="zookeeper-name">
+  <%= zookeeper.header() %>
+  <div class='nodes'>
+    <% if (zookeeper.get('ensemble').length > 0 ) { %>
+      <span class='states' data-original-title="<%= zookeeper.get('ensemble').join('</br>') %>">
+        Online (<%= zookeeper.get('ensemble').length %>)
+      </span>
+    <% } %>
+    <% if (zookeeper.get('ensemble').length > 0 && zookeeper.offline_nodes().length > 0) { %>
+      |
+    <% } %>
+    <% if (zookeeper.offline_nodes().length > 0 ) { %>
+      <span class='states' data-original-title="<%= zookeeper.offline_nodes().join('</br>') %>">
+        Offine (<%= zookeeper.offline_nodes().length %>)
+      </span>
+    <% } %>
+  </div>
+  <% if(zookeeper.get('status') == 0 && !zookeeper.quarum_failed()){ %>
+    <i class="icon-remove-sign destroy-zk icon-white" title="Forget this Zookeeper"/>
+  <% } %>
+</h2>

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/javascripts/users.js
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/javascripts/users.js b/contrib/blur-console-v1/blur-admin/app/assets/javascripts/users.js
new file mode 100644
index 0000000..daf66aa
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/javascripts/users.js
@@ -0,0 +1,121 @@
+/**
+ * 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.
+ */
+$(document).ready(function(){
+  //Ajax request that serializes your columns and persists them to the DB
+  var save_pref = function(){
+    var user_id = $('#show_user_wrapper').attr('data-user-id');
+    $.ajax(Routes.user_preference_path(user_id, 'column', {format: 'json'}),
+    {
+      type: 'PUT',
+      data: $('#my-cols').sortable('serialize'),
+    });
+  };
+
+  //Sortable list of your chosen columns
+  $('#my-cols').sortable({
+    connectWith: "#actual-trash",
+    stop: function(){
+      save_pref();
+    }
+  });
+
+  //Trash can droppable, removes from your chosen preferences
+  $('#actual-trash').droppable({
+    drop: function(event, ui){
+      $(ui.draggable).remove();
+      $('.sort#my-cols').sortable('refresh');
+      $('.fam#' + $(ui.draggable).attr('id')).toggleClass('my-select');
+      save_pref();
+    }
+  });
+
+  //Click event for selecting a column from all possible columns
+  $('.fam').live('click', function(){
+    $(this).toggleClass('my-select');
+    var clicked = $('#' + $(this).attr('id') + '.sel-fam');
+
+    //if the element isnt in the list of selected columns
+    //add the column to your pref list
+    if (clicked.length == 0)
+    {
+      $('#no-saved').hide();
+      var app = $(this).clone().removeClass('fam my-select').addClass('sel-fam');
+      $('#my-cols').append(app.hide());
+      app.fadeIn('slow', function(){ save_pref(); });
+    }
+
+    //else the element is already in the list of selected columns
+    //remove it from the list of selected columns
+    else
+    {
+      clicked.fadeOut('slow', function(){
+        clicked.remove();
+        if ($('#my-cols').children().length == 1)
+        {
+          $('#no-saved').fadeIn('fast');
+        }
+        save_pref();
+      });
+    }
+  });
+
+  $('#pref-title').on('ajaxStart', function(){
+    $(this).removeClass('hidden-spinner');
+  });
+  $('#pref-title').on('ajaxStop', function(){
+    $(this).addClass('hidden-spinner');
+  });
+
+  //*******Zookeeper dropdown code********
+  //Helper functions
+  var checkSelectionStatus = function(){
+    if ($('#zookeeper_pref option:selected').val() != 1){
+      $('#zookeeper_num').hide();
+    } else{
+      $('#zookeeper_num').show();
+    }
+    $('#zookeeper_submit').removeAttr('disabled');
+  };
+  //Page Listeners
+  $('#zookeeper_pref').on('change', function(){
+   checkSelectionStatus();
+  });
+  $('#zookeeper_num').on('change', function(){
+    $('#zookeeper_submit').removeAttr('disabled');
+  });
+  $('#zookeeper_submit').on('click', function(){
+    var selected_pref = $('#zookeeper_pref option:selected').val();
+    var selected_zk = '';
+    if (selected_pref == 1 || 2){
+      selected_zk = $('#zookeeper_num option:selected').val();
+    }
+    var user_id = $('#show_user_wrapper').attr('data-user-id');
+    $.ajax(Routes.user_preference_path(user_id, 'zookeeper', {format: 'json'}), {
+      type: 'PUT',
+      data: {
+        name: selected_pref,
+        value: selected_zk
+      }
+    });
+    $('#zookeeper_submit').attr('disabled', 'disabled');
+  });
+  //Code for onLoad
+  checkSelectionStatus();
+  $('#zookeeper_submit').attr('disabled', 'disabled');
+
+});
+

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/application.scss
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/application.scss b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/application.scss
new file mode 100644
index 0000000..581964e
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/application.scss
@@ -0,0 +1,48 @@
+/**
+ * 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.
+ */
+//= require_self
+//= require ui.dynatree
+//= require jquery-ui
+
+// over ride any bootstrap variables
+$gridColumnWidth: 80px;
+
+//import libraries and root styles
+@import "bootstrap";
+@import "mixins";
+@import "base";
+@import "help";
+@import "navigation";
+@import "bootstrap_addons";
+
+// JQuery ones to look at
+@import "jquery.contextMenu";
+@import "jquery.osxFinder";
+@import "jquery.timepicker";
+
+// Application specific pages
+@import "search";
+@import "blur_queries";
+@import "blur_tables";
+@import "dashboard";
+@import "zookeeper";
+@import "user_session";
+@import "users";
+@import "hdfs";
+@import "hdfs_metrics";
+@import "audits";
+@import "errors";

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/audits.scss
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/audits.scss b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/audits.scss
new file mode 100644
index 0000000..c955a9c
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/audits.scss
@@ -0,0 +1,106 @@
+/**
+ * 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.
+ */
+#audits_wrapper{
+  #audits_table{
+      .row {
+        & > div:first-child {
+          vertical-align: top;
+          padding-top: 15px;
+        }
+
+        & > div:last-child {
+          float: right;
+        }
+
+        .span2, .span3{
+          float: right;
+        }
+
+        .span2{
+          width: 325px;
+          input{
+            width: 100px;
+            margin-right: 5px;
+          }
+          label{
+            display: inline-block;
+            width: 300px;
+            margin-bottom: 0px;
+          }
+          button{
+            margin-bottom: 10px;
+          }
+          .dataTables_processing{
+            display: none;
+          }
+        }
+      }
+
+      .dataTables_filter{ 
+        width: 100%;
+        float: right;
+        input{ width: 96%; }
+      }
+      
+      .dataTables_info {
+        padding-top: 8px;
+      }
+
+      .dataTables_processing {
+        padding-top: 8px;
+      }
+    th{
+      cursor: pointer;
+      margin-right: 10px;
+      .header_content {
+        position: relative;
+        div {
+          display: inline-block;
+          margin-right: 10px;
+        }
+      }
+
+      &.sorting_disabled{
+        cursor: default;
+      }
+
+      &.headerSortDown{
+        .icon-chevron-up{ display: none; }
+        .icon-chevron-down{ display: block; }
+      }
+
+      &.headerSortUp{
+        .icon-chevron-up{ display: block; }
+        .icon-chevron-down{ display: none; }
+      }
+
+      i{
+        position:absolute;
+        display: none;
+        &.icon-chevron-up{
+          top: 5px;
+          right: 10px;
+        }
+
+        &.icon-chevron-down{
+          bottom: 5px;
+          right: 10px;
+        }
+      }
+    }
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/base.scss
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/base.scss b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/base.scss
new file mode 100644
index 0000000..d46fb06
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/base.scss
@@ -0,0 +1,191 @@
+/**
+ * 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.
+ */
+$base-theme-color: #f6a828;
+
+$red-state-color: #B81900;
+$red-border-color: #CD0A0A;
+$green-border-color: #62A630;
+
+$table-hd-color: #E4EDFF;
+$table-hd-text: #667495;
+
+$grey-color: #EEEEEE;
+$grey-div-color: #F0F0F0;
+
+$row-hover: #FFE4A3;
+
+$font-color: #555;
+$border_color: #999;
+$zk-header-color: #93A7AC;
+
+$border_width: 1px;
+$border_style: solid;
+
+$twitter-border: 1px solid #ccc;
+
+$blue-dashboard-color: #93A7AC;
+$faded-blue-dashboard-color: #CED7DA;
+$green-dashboard-color:  #7DC77D;
+$blue-chart-dashboard-color: #AFD8F8;
+$red-dashboard-color: #FF1919;
+$yellow-dashboard-color: #EDC240;
+
+// Page settings
+$footer-height: 45px;
+
+html{
+  height: 100%;
+  //min-height: 400px;
+	min-width: 1240px;
+  overflow: auto;
+  body{
+    position: relative;
+    padding-bottom: $footer-height;
+  }
+}
+h2{
+    color:$blue-dashboard-color;
+}
+#modal{
+	max-height:500px;
+	overflow:none;
+	.modal-body{
+		max-height:440px;
+		overflow-y:auto;
+		margin-bottom:60px;
+	}
+	.modal-footer{
+		position:absolute;
+		bottom:0px;
+		width: 530px;
+	}
+}
+
+input[placeholder].placeholder{
+	color: #888 !important;
+}
+
+#login_wrapper{
+	#error_explanation{
+		ul{
+			list-style: none;
+			color:red;
+		}
+	}
+
+	.help-inline{
+		color: red;
+		padding: 0px;
+		margin: 5px;
+	}
+
+	input:not(.btn){
+		display:block;
+		margin:auto;
+	}
+}
+
+.dynatree-connector ~ .dynatree-title{
+	cursor: default;
+}
+
+// Tree overrides
+ul.dynatree-container {
+	background-color: inherit !important;
+	color: inherit !important;
+	border: none !important;
+	a:focus, span.dynatree-focused a:link {
+		background-color: inherit !important;
+	}
+	li {
+	  line-height: 16px;
+		a:focus {
+			outline: none !important;
+		}
+		a {
+			background-color: inherit !important;
+			color: inherit !important;
+		}
+		border: none !important
+	}
+}
+.modal-list{
+  &.no-well{ background-color: white; }
+  list-style-type:none;
+  max-height:400px;
+  overflow: auto;
+  padding: 5px;
+  background-color: whitesmoke;
+  li{
+    &.error div{
+      background-color: rgba(218, 79, 73, .8);
+      color: white;
+      border-color: #DA4F49;
+      &.icon:hover{
+        background-color: rgba(218, 79, 73, .6);
+      }
+    }
+
+    &.no-error div{
+      //background-color: rgba(91, 183, 91, .9);
+      //color: white;
+      //border-color: #5BB75B;
+      &.icon:hover{
+        //background-color: rgba(91, 183, 91, .7);
+      }
+    }
+
+    &:not(:last-child){
+      padding-bottom: 3px;
+    }
+    height: 30px;
+    div{
+      border: solid 1px #CCC;
+    }
+    .icon ~ .info{
+      @include border-radius-left(0px);
+    }
+    .info{
+      background-color: white;
+      padding: 5px;
+      @include border-radius;
+      overflow-x: hidden;
+      text-overflow: ellipsis;
+      white-space: nowrap;
+    }
+    .icon{
+      float: left;
+      display: inline-block;
+      @include border-radius-left;
+      @include clearfix;
+      background-color: whitesmoke;
+      border-right: none;
+      cursor: pointer;
+      vertical-align: top;
+      &:hover{
+        background-color: #999;
+        border-color: #999;
+      }
+      & > i {
+        margin: 6px;
+        margin-bottom: 7px;
+        background-color: transparent;
+      }
+    }
+  }
+}
+.hidden{ display: none !important; }

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/blur_queries.scss
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/blur_queries.scss b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/blur_queries.scss
new file mode 100644
index 0000000..d5ed871
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/blur_queries.scss
@@ -0,0 +1,141 @@
+/**
+ * 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.
+ */
+#queries-table_wrapper > .row:first-child > div:last-child {
+  float: right;
+}
+
+#blur_queries_wrapper {
+  padding-top: 2em;
+  padding-bottom: 2em;
+  @include standard-font;
+  @include clearfix;
+  .dataTables_filter{
+    width: 100%;
+    float: right;
+    input{
+      width: 96%;
+    }
+  }
+
+  .span2{
+    position: relative;
+    right:200px;
+    top:35px;
+  }
+  .span4{
+    position: relative;
+    left: 100px;
+    .dataTables_info{
+      text-align: center;
+    }
+  }
+  .dataTables_info {
+    padding-top: 8px;
+  }
+  .row > *:first-child {
+    vertical-align: top;
+    padding-top: 15px;
+  }
+  .range_select{
+    select{
+      width: 100px;
+    }
+  }
+  .dataTables_processing {
+    padding-top: 8px;
+  }
+  #queries-table{
+    table-layout:relative;
+    font-weight: normal;
+    td{
+      vertical-align: middle;
+      word-wrap: break-word
+    }
+    .cancel_query_button{
+      margin: 0;
+    }
+
+    form.cancel {
+      display: inline-block;
+      @include ie7-inline-block;
+      margin-right: 3px;
+      margin-bottom: 0;
+    }
+    tbody tr:not(.oldRunning){
+      & + .oldRunning, .oldRunning:first-child{
+        td{
+          border-top: 1px solid #FF0000;
+        }
+      }
+      height: 45px;
+    }
+    .oldRunning{
+      td{
+        background: rgba(247, 225, 225, 0.8);
+        border-bottom: 1px solid #FF0000;
+      }
+    }
+    th{
+      cursor: pointer;
+      margin-right: 10px;
+      .header_content {
+        position: relative;
+        div {
+          display: inline-block;
+          margin-right: 10px;
+        }
+      }
+
+      &.headerSortDown{
+        .icon-chevron-up{
+          display: none;
+        }
+        .icon-chevron-down{
+          display: block;
+        }
+      }
+
+      &.headerSortUp{
+        .icon-chevron-up{
+          display: block;
+        }
+        .icon-chevron-down{
+          display: none;
+        }
+      }
+
+      i{
+        position:absolute;
+        display: none;
+        &.icon-chevron-up{
+          top: 5px;
+          right: 10px;
+        }
+
+        &.icon-chevron-down{
+          bottom: 5px;
+          right: 10px;
+        }
+      }
+    }
+  }
+}
+
+#more-info-table {
+  td { color: #555; }
+  .more-info-label { white-space: nowrap; font-weight: bold;}
+}

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/blur_tables.scss
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/blur_tables.scss b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/blur_tables.scss
new file mode 100644
index 0000000..c298744
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/blur_tables.scss
@@ -0,0 +1,108 @@
+/**
+ * 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.
+ */
+#blur_tables {
+  width: 99%;
+  border: none;
+  margin: 15px 10px 0;
+  table { margin-bottom: 5px; }
+  .active a, .active a:hover{ background-color:#F9F9F9; }
+}
+#tables-wrapper{
+  border: $twitter-border;
+  padding:10px;
+  @include border-radius(5px);
+}
+
+.cluster-tabs{
+  margin:15px 0;
+  .active a, .active a:hover{ background-color:#F9F9F9; }
+}
+.bulk-action-selector{ margin: 10px 5px 10px 0px; }
+tr.highlighted-row td{ background:#FAD08A !important; }
+.live-col{
+  color: $green-border-color ! important;
+}
+.disabled-col{
+  color: $red-border-color ! important;
+}
+.popover-close{
+  position:absolute;
+  top:15px;
+  right:15px;
+  &:hover{
+    cursor: pointer;
+    background-color:#CCC;
+    border-radius:3px;
+  }
+}
+.terms{
+  color:#08C;
+  text-decoration:none;
+  cursor:pointer;
+  &:hover{
+    color:#048;
+    text-decoration:underline;
+  }
+}
+.reset-term-search{
+  display:none;
+}
+
+.terms-list{
+  list-style-type:none;
+  max-height:400px;
+  overflow-y:auto;
+  padding:5px;
+  padding-bottom: 0px;
+  .uneditable-input{
+    margin-bottom: 0px;
+  }
+}
+.search-term-link{
+  cursor:pointer;
+  &:hover{
+    background-color:#CCC;
+  }
+}
+.term-input{
+  cursor:default;
+  & > span{
+    cursor:text;
+    padding-left:10px;
+  }
+}
+.more-terms{
+  margin-top:10px;
+}
+.table .checkbox-td{
+  width:20px;
+  text-align: center;
+}
+
+.popover{
+  #loading-spinner{
+    padding: 5px;
+  }
+}
+.comment_row{
+  width: 250px;
+}
+.blur_table_row_count{
+  width:150px;
+}
+
+th:not(.sorttable_nosort) { cursor: pointer; }

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/bootstrap_addons.scss
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/bootstrap_addons.scss b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/bootstrap_addons.scss
new file mode 100644
index 0000000..fe08484
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/bootstrap_addons.scss
@@ -0,0 +1,22 @@
+/**
+ * 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.
+ */
+input[type="text"],input[type="email"],input[type="password"],textarea,select{color:#000 !important;}
+
+table {
+  margin: 1em 0;
+  clear: both;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/dashboard.scss
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/dashboard.scss b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/dashboard.scss
new file mode 100644
index 0000000..5e4df1c
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/dashboard.scss
@@ -0,0 +1,177 @@
+/**
+ * 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.
+ */
+@mixin box-title {
+  position:absolute;
+  display:block;
+  top:-18px;
+  left:20px;
+  background:#fff;
+}
+
+@mixin zoo-widget {
+  border-top:$twitter-border;
+  padding-top:20px;
+  position:relative;
+}
+
+@mixin zoo-status {
+	text-align: center;
+  display: inline-block;
+  padding:1px 15px 1px;
+  margin: 2px 0 2px;
+  &.important{font-style:italic;}
+}
+
+#zookeepers_wrapper, #hdfs_dash_wrapper {
+  @include standard-font;
+  @include zoo-widget;
+  margin-top: 2em;
+
+  .zookeeper_info, .hdfs_info {
+    width: 450px;
+    margin: 0px 10px 20px 20px;
+    display: inline-block;
+    border: 1px solid;
+    font-size: 15px;
+    border-color: $blue-dashboard-color;
+    @include border-radius(5px);
+
+    table{ margin:0; width:100%; }
+    table tbody th { text-align:center; vertical-align:middle; }
+    .status-bar{ @include border-radius() }
+
+    &:hover{
+      cursor: pointer;
+      background: #F4F5F6;
+    }
+  }
+
+  .zookeeper-title, .hdfs-title {
+    font-size: 130%;
+    padding: 5px 10px;
+    text-align: left;
+		@include border-radius-bottom(0);
+    img {
+      height: 18px;
+    }
+  }
+
+	.hdfs-body {
+		min-height: 177px;
+	}
+
+  .zookeeper-body, .hdfs-body {
+    width: 430px;
+    margin: 10px;
+
+    td {text-align: center;}
+    h6{ color: $font-color; }
+
+    .zookeeper-cont-info, .zookeeper-shard-info {
+      width: 65px;
+      vertical-align: middle;
+      .zk-shard-info { text-align: right; }
+      .zk-cont-info{ text-align: left; }
+    }
+
+    .hdfs-chart { margin: 0 0 10px 30px; }
+    .cont-chart, .shard-chart { margin-left: 5px; }
+
+    .query-warning {
+      color: $red-dashboard-color;
+      margin-top: 10px;
+    }
+
+    .chart-title-text {
+      margin-top: -136px;
+      z-index: 1;
+    }
+
+    .legend{
+      margin: -124px 0 0 77px;
+      z-index: 1;
+      h6{ float: left; }
+
+      .legend-box {
+        width: 12px;
+        height: 12px;
+        float: left;
+        margin: 2px 5px 0 0;
+        border: 1px solid $border_color;
+      }
+
+      .healthy{ background-color: $green-dashboard-color; }
+      .corrupt{ background-color: $blue-chart-dashboard-color; }
+      .missing{ background-color: $red-dashboard-color; }
+      .under-replicated{ background-color: $yellow-dashboard-color; }
+    }
+
+    .error-label{ color: $red-dashboard-color; }
+
+    .zk-chart{
+      $zk-size: 135px;
+      width: $zk-size;
+      line-height: $zk-size;
+      height: $zk-size;
+      position: relative;
+      text-align: center;
+    }
+
+    .hdfs-chart-container {
+      $hdfs-size: 175px;
+      width: $hdfs-size;
+      height: $hdfs-size;
+      position: relative;
+      text-align: center;
+    }
+
+    .hdfs-chart { margin-top: -50px }
+
+    .hdfs-bar-container {
+      width: 130px;
+      padding-right: 20px;
+    }
+  }
+
+  #zookeepers,#hdfses{ height: 100%; }
+	h2 { color: $zk-header-color; @include box-title;}
+
+  .progress-status{
+    background-image: none;
+    position: relative;
+    margin: 0px;
+    @include border-radius();
+    .bar{
+      @include border-radius();
+      background-image: none;
+    }
+  }
+  .red-bar { background-color: $red-dashboard-color; }
+  .faded-bar { background-color: $faded-blue-dashboard-color; }
+  .green-bar { background-color: $green-dashboard-color; }
+  .yellow-bar { background-color: $yellow-dashboard-color; }
+
+  span.title-subtle{
+    float: right;
+    opacity: .7;
+  }
+
+  .label{
+    background-color: $blue-dashboard-color;
+    width: 430px;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/errors.scss
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/errors.scss b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/errors.scss
new file mode 100644
index 0000000..4ea974b
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/errors.scss
@@ -0,0 +1,39 @@
+/**
+ * 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.
+ */
+#error_wrapper{
+  h1 {
+    text-align:center;
+  }
+  h2 {
+    text-align:center;
+    color:black;
+  }
+  img {
+    display: block;
+    margin-left: auto;
+    margin-right: auto;
+  }
+  h3 {
+    text-align:center;
+    color:black;
+  }
+}
+#error_message {
+  display: block;
+  margin-left:auto;
+  margin-right:auto;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/hdfs.scss
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/hdfs.scss b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/hdfs.scss
new file mode 100644
index 0000000..dddd175
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/hdfs.scss
@@ -0,0 +1,145 @@
+/**
+ * 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.
+ */
+#newFolder {
+  text-align: center;
+  input {
+    width: 20em;
+  }
+}
+
+
+#hdfs_wrapper{
+  @include standard-font;
+  padding-bottom: 20px;
+  @include box-sizing(border-box);
+  height: 300px;
+
+  #hdfs_browser {
+    background-color: #F8F8F8;
+    @include border;
+    @include border-radius;
+    overflow-y: auto;
+    div.innerWindow {
+      @include border;
+      background-color: white;
+      .noFiles {
+        font-size: 1.2em;
+        font-style: italic;
+        text-align: center;
+      }
+      >ul>li {
+        &.file, &.folder, &.hdfs_instance {
+          a {
+            @include box-sizing(border-box);
+            display: block;
+            width: 225px;
+            overflow-x: hidden;
+            text-overflow: ellipsis;
+            white-space: nowrap;
+            padding-right: 20px;
+          }
+        }
+        &.folder, &.hdfs_instance {
+          background: url("expand_folder.png") no-repeat scroll right center transparent;
+        }
+        &.file a {
+          background: url("file16.png") no-repeat scroll left center transparent;
+          padding-left: 20px;
+        }
+        &.hdfs_instance a {
+          background: url("database16.png") no-repeat scroll left center transparent;
+          padding-left: 20px;
+        }
+        &.folder a {
+          background: url("folder16.png") no-repeat scroll left center transparent;
+          padding-left: 20px;
+        }
+        &:hover, &.rclicked{
+          border:  1px solid #B8D6FD;
+        }
+        &.osxSelected {
+          background-color:#3875D7;
+          border:  1px solid #3875D7;
+          a {
+            color: white;
+          }
+        }
+      }
+    }
+  }
+
+  #file_details_table {
+    tr:nth-child(even) { background-color: white; };
+    tr:nth-child(odd) { background-color: $grey-div-color; }
+    table { margin: 0; @include border;}
+    th {
+      background-color: $table-hd-color;
+      color: $table-hd-text;
+    }
+    th.name, td.name {text-align: left; }
+    th, td {
+      @include standard-font;
+      text-align: center;
+    }
+    tr:hover {
+      cursor: pointer;
+      background: $row-hover;
+    }
+  }
+
+  .to-cut {
+    a { color: #AAA; }
+  }
+}
+
+#modal{
+  max-height: 600px;
+  .search-info-section{
+    width: 49%;
+    display: inline-block;
+    vertical-align: top;
+    .radial-graph{
+      position: relative;
+      text-align: center;
+      height: 400px;
+      width: 100%;
+      path{
+        cursor: pointer;
+        &:hover{
+          opacity: .6;
+        }
+      }
+      .graphtip{
+        position: absolute;
+        display: block;
+        z-index: 50;
+        #tipcontent{
+          padding: 1px 6px 1px 6px;
+          border: 4px solid #e2e2e2;
+          max-width: 400px;
+          background: white;
+          color: black;
+          @include border-radius(5px);
+        }
+      }
+    }
+  }
+  .hidden{ display: none; }
+  #upload_file_warning{ color: red; font-weight: bold; }
+}
+
+

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/hdfs_metrics.scss
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/hdfs_metrics.scss b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/hdfs_metrics.scss
new file mode 100644
index 0000000..eccb23f
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/hdfs_metrics.scss
@@ -0,0 +1,126 @@
+/**
+ * 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.
+ */
+$title_height: 35px;
+$graph_height: 240px;
+$total_graph_height: $graph_height + 60px;
+$instance_height: $title_height + $total_graph_height;
+
+@mixin graph_component{
+	display: inline-block;
+	@include box-sizing(border-box);
+}
+
+@mixin clickable_title{
+	height: $title_height;
+	h3{ line-height: $title_height; }
+	text-align: center;
+	border: 1px solid #ccc;
+	@include gradient-vertical(#fff, #F4F4F4);
+}
+
+@mixin clickable{
+	cursor: pointer;
+	&:hover{
+		opacity: .6;
+	}
+}
+
+#metrics_page_wrapper {
+	.create_graph_prompt{
+		margin-top: 10px;
+		@include clickable_title;
+		@include clickable;
+	}
+	.joined_instance{
+		.graph_title{
+			position: relative;
+			i{
+				position: absolute;
+				top: 10px;
+				right: 10px;
+				@include clickable;
+			}
+		}
+	}
+
+	.graph_instance, .joined_instance {
+		margin: 10px 0 10px 0;
+		position: relative;
+		height: $instance_height;
+		&:not(:last-child){
+			.graph_content{
+				border-bottom: none;
+			}
+		}
+		.graph_title{
+			@include clickable_title;
+			border-bottom: none;
+		}
+		.graph_content{
+			@include graph_component;
+			width: 100%;
+			height: $total_graph_height;
+			border: 1px solid #ccc;
+			position: absolute;
+			.graph_data{
+				@include box-sizing(border-box);
+				width: 100%;
+				padding: 10px 10px 0 10px;
+				.graph{
+          margin: 5px 5px 5px 5px;
+					height: $graph_height - 20;
+				}
+			}
+      .graph_info {
+				padding: 0 50px 0 205px;
+        bottom: 0;
+        .graph-info-table {
+          width: 100%;
+          margin: -5px 0 0 0;
+          .slider-info{
+            text-align: right;
+            .slider-time{
+              text-align: right;
+              width: 14px;
+            }
+            .min-date, .max-date {
+              text-align: right;
+              width: 100px;
+            }
+            .slider-redraw { margin: 0 5px 9px 0; }
+          }
+          .slider-box {
+            width: 350px;
+            .slider{
+              width: 300px;
+              margin-right: 15px;
+              float: right;
+            }
+          }
+          span.axis-value{
+            font-weight: bold;
+          }
+        }
+      }
+		}
+	}
+  .loading-spinner {
+    float: left;
+    position: absolute;
+    padding: 9px 0 0 9px;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/help.scss
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/help.scss b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/help.scss
new file mode 100644
index 0000000..e442d56
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/help.scss
@@ -0,0 +1,39 @@
+/**
+ * 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.
+ */
+
+#page-help{ text-decoration: none; }
+#help-window{
+  overflow: auto;
+  height: 600px;
+	max-width: 500px;
+  .help-section{
+    cursor: pointer;
+    margin: 2px;
+    padding: 8px;
+    padding-left: 10px;
+    background: #EEE;
+    @include standard-border;
+    .help-label{
+      margin: 0px;
+      margin-bottom: 5px;
+    }
+    .head{
+      margin-bottom: 2px;
+    }
+    ul{ margin-top: 3px; }
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/mixins.scss
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/mixins.scss b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/mixins.scss
new file mode 100644
index 0000000..5dc0567
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/mixins.scss
@@ -0,0 +1,76 @@
+/**
+ * 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.
+ */
+// Fonts
+@mixin standard-font {
+  font-weight: bold;
+  color: $font-color;
+}
+
+// Borders
+@mixin border        { border:        $border_width $border_style $border_color; }
+@mixin border-top    { border-top:    $border_width $border_style $border_color; }
+
+@mixin border-radius-bottom($radius:5px) {
+	-webkit-border-bottom-left-radius: $radius;
+	-webkit-border-bottom-right-radius: $radius;
+	-moz-border-radius-bottomleft: $radius;
+	-moz-border-radius-bottomright: $radius;
+}
+
+@mixin border-radius-top($radius:5px) {
+  -webkit-border-top-left-radius: $radius;
+  -webkit-border-top-right-radius: $radius;
+  -moz-border-radius-topleft: $radius;
+  -moz-border-radius-topright: $radius;
+}
+
+@mixin border-radius-right($radius:5px) {
+	-webkit-border-top-right-radius: $radius;
+	-webkit-border-bottom-right-radius: $radius;
+	-moz-border-radius-topright: $radius;
+	-moz-border-radius-bottomright: $radius;
+}
+
+@mixin border-radius-left($radius:5px) {
+	-webkit-border-top-left-radius: $radius;
+	-webkit-border-bottom-left-radius: $radius;
+	-moz-border-radius-topleft: $radius;
+	-moz-border-radius-bottomleft: $radius;
+}
+
+@mixin danger-progress-background{
+  background-image: -moz-linear-gradient(top, #EE5F5B, #C43C35);
+  background-image: -ms-linear-gradient(top, #EE5F5B, #C43C35);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#EE5F5B), to(#C43C35));
+  background-image: -webkit-linear-gradient(top, #EE5F5B, #C43C35);
+  background-image: -o-linear-gradient(top, #EE5F5B, #C43C35);
+  background-image: linear-gradient(top, #EE5F5B, #C43C35);
+}
+
+@mixin neutral-progress-background{
+  background-image: -moz-linear-gradient(top, #08C, #04C);
+  background-image: -ms-linear-gradient(top, #08C, #04C);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#08C), to(#04C));
+  background-image: -webkit-linear-gradient(top, #08C, #04C);
+  background-image: -o-linear-gradient(top, #08C, #04C);
+  background-image: linear-gradient(top, #08C, #04C);
+}
+
+@mixin standard-border {
+  @include border-radius;
+  @include border;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/navigation.scss
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/navigation.scss b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/navigation.scss
new file mode 100644
index 0000000..9ee26a9
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/navigation.scss
@@ -0,0 +1,102 @@
+/**
+ * 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.
+ */
+$nav-height: 40px;
+
+#root{
+  .navbar{
+    // A complete hack for FF width bug
+    padding-right: 3px;
+    background: url("gradient.png") repeat-x scroll 0 -58px;
+    .brand{
+      padding-bottom: 0px;
+    }
+  }
+	.navbar-inner {
+    // Also part of the browser hack for FF
+		background: transparent;
+		@include border-radius(0);
+		height: $nav-height;
+		> ul li {
+			&.active > a{
+				color: $base-theme-color;
+				background-color: transparent;
+			}
+		}
+    #zookeeper_select > select{
+      margin: 6px;
+    }
+	}
+  #bd {
+    @include clearfix;
+    position:relative;
+  }
+}
+
+#flash {
+  width: 600px;
+  text-align: center;
+  font-size: 1.2em;
+  font-weight: bold;
+  bottom: 0px;
+  right: 0px;
+  position: fixed;
+  z-index: 100;
+  div{
+    position: absolute;
+    @include transition(right 3s);
+    right: -600px;
+    bottom: 0px;
+    cursor: pointer;
+    max-width: 600px;
+    min-width: 300px;
+    $alert-height: 44px;
+    height: $alert-height;
+    line-height: $alert-height;
+    margin: auto;
+    padding: 0px 14px 0px 14px;
+    &:not(:first-child){
+      @include border-radius(0px);
+    }
+    @include border-radius-bottom(0px);
+    @include border-radius-right(0px);
+  }
+}
+
+#ft {
+  bottom: 0;
+  position: fixed;
+  width: 100%;
+  $footer-color: lighten($base-theme-color, 20%);
+  background-color: $footer-color;
+  text-align: center;
+  height: $footer-height;
+  line-height: $footer-height - 1;
+  border-top: 1px solid darken($footer-color, 10%);
+  @include box-shadow(0 1px 0 lighten($footer-color, 10%) inset);
+  text-align: right;
+  z-index: 99;
+  
+  #company-info {
+    float: right;
+    margin-top: 15px;
+  }
+  p{
+    color: darken($footer-color, 40%);
+    text-decoration: none;
+    margin-right: 50px;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/search.scss
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/search.scss b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/search.scss
new file mode 100644
index 0000000..df1af90
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/search.scss
@@ -0,0 +1,237 @@
+/**
+ * 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.
+ */
+@mixin search-tab {
+  width: 9%;
+  text-align: left;
+  .header{
+    text-align: center;
+    cursor: pointer;
+  }
+  position: relative;
+  border-right: 1px solid #ccc;
+  .body{
+    min-width: 200px;
+	  top: 35px;
+	  right: 0px;
+	  background-color: #F4F4F4;
+	  position: absolute;
+		@include border-radius-bottom;
+	  border: solid 1px #ccc;
+	  border-top: none;
+  }
+  img{ 
+    vertical-align: middle;
+    padding: 0px 0px 4px 4px;
+  }
+}
+
+@mixin title-style{
+  text-align: center;
+  font-weight: bold;
+  padding-bottom: 10px;
+}
+#search_page_wrapper {
+  text-align: center;
+  .section{
+    border-top: 1px solid #ccc;   
+    padding: 10px 0 10px 0;     
+  }
+
+  #filter_section {
+    width: 100%;
+    z-index: 999;
+    @include standard-font;
+    position: absolute;
+    top: -20px;
+    left: 0;
+    padding: 10px 0px 0px 10px;
+    @include box-sizing(border-box);
+		@include gradient-vertical(#fff, #F4F4F4);
+    border-bottom: 1px solid #ccc;
+    #filters_wrap{
+      & > div{ display:inline-block; }
+      .partial-section, .body { padding: 0.5em; }
+
+      #standard{
+        position: relative;
+        width: 69%;
+        .search_field{
+          display: inline-block;
+          width: 89%;
+          #query_string{
+            width: 100%;
+            @include border-radius-right(0);
+            padding-right: 0px;
+          }
+        }
+        .btn{
+          width: 10%;
+          @include border-radius-left(0);
+          margin-bottom: 9px;
+          &:disabled{
+            height: 30px;
+          }
+        }
+        img{
+          position: absolute;
+          padding: 6px 4px;
+        }
+      }
+
+      #blur-table{
+        width: 9%;
+        margin: 0 5px 0 15px;
+        #blur_table{
+          width: 100%;
+        }
+      }
+
+      #advanced{
+        .arrow_up { display: none; }
+        @include search-tab;
+        border-left: 1px solid #ccc;
+        .body{
+          #blur_table{ width: 100%; }
+          td:first-child{ font-weight: bold; }
+        }
+        input{ width: 50px; }
+        #filter_columns{
+          max-height: 250px;
+          overflow: auto;
+          align: right;
+        }
+        #radio_buttons{
+          margin-top: -15px;
+          margin-left: 25px;
+          margin-bottom: -15px;
+        }
+        #radio_headers{
+          margin-top: -20px;
+        }
+        .filter_text{
+          width: 100%;
+        }
+      }
+
+      #loading-spinner { vertical-align: middle; }
+
+      #saved{
+        .arrow_up { display: none; }
+        text-align: center;
+        @include search-tab;
+        .action-icon{ cursor: pointer; }
+        .saved-title{ @include title-style; }
+      }
+    }
+  }
+
+    
+    .filter {
+      font-weight: bold;
+      td{
+        padding: 3px;
+      }
+      .filtered-title{
+        @include title-style;
+      }
+    }
+
+    .filter#buttons { 
+      text-align: center; 
+      button{font-size:85%;} 
+      display: inline-block;
+      width: 100%;
+      padding-top: 10px;
+    }
+    
+    #search_form{ margin: 0px; }
+
+  #results_wrapper{
+    margin-top:35px;
+    max-width: 100%;
+    overflow: auto;
+    border: 1px solid #999;
+    display: inline-block;
+    &.noResults{
+      border: none;
+    }
+
+    #results_container{
+      position: relative;
+      .no-results{
+        padding-top: 1em;
+        font-weight: bold;
+        line-height: 1.5em;
+        font-size: 1.5em;
+      }
+      #results_info{
+        background-color: white;
+        text-align: left;
+      }
+
+      #results_section{
+        display: inline-block;
+        background-color : white;
+        width: auto;
+      }
+    }
+    table {
+      border-top: solid 1px #ccc;
+      margin: 0px;
+      empty-cells: show;
+      td{ min-width: 100px; }
+      thead {
+        background-color: $table-hd-color;
+        th {
+          background: transparent;
+          text-align: center;
+          color: $table-hd-text;
+          font-weight: bold;
+          font-size: 120%;
+        }
+        tr.columnsets th {
+          font-weight: normal;
+          }
+      }
+      tbody {
+        td.even {
+          background-color: $table-hd-color
+        }
+        tr.first{
+          @include border-top;
+          vertical-align: top;
+        }
+      }
+    }
+  }
+
+  #saved, #store , #advanced { & .body { display: none; } }
+
+  .header {
+    padding: 5px 0;
+    img{
+      vertical-align: middle;
+    }
+		label { cursor: pointer; }
+  }
+
+  // Navigation Tab label div
+  .tab { background-color:#EEE; }
+  .search-name{float:left;}
+  .search-buttons{float:right;}
+}
+

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/user_session.scss
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/user_session.scss b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/user_session.scss
new file mode 100644
index 0000000..ee80a13
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/user_session.scss
@@ -0,0 +1,31 @@
+/**
+ * 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.
+ */
+#login_wrapper{
+  @include standard-font;
+  padding-top: 150px;
+	width: 400px;
+	margin-left: auto;
+	margin-right: auto;
+	text-align: center;
+}
+.help-inline{
+  display: none;
+}
+
+p{
+  padding-top: 5px;
+}

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/users.scss
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/users.scss b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/users.scss
new file mode 100644
index 0000000..2afeee9
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/users.scss
@@ -0,0 +1,172 @@
+/**
+ * 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.
+ */
+@mixin info($color) {
+  @include border;
+  @include border-radius;
+  background-color: $color;
+}
+
+@mixin pref-box{
+  @include info(white);
+  margin:0px 0px 0px 0px;
+}
+
+ul{ margin: 5px; }
+
+#admin_wrapper, #new_user_wrapper, #edit_user_wrapper, #show_user_wrapper{
+  @include standard-font;
+
+  $select-color: #FAD08A;
+
+  text-align: center;
+  margin-top: 1em;
+  label {
+      font-size:20px;
+      margin: 5px 0px 5px 0px;
+      color:$blue-dashboard-color;
+  }
+  span{
+      font-weight:normal;
+  }
+  #roles_wrapper{
+    li{
+      list-style-type:none;
+      display:block;
+    }
+  }
+  .info-contain{
+    @include clearfix;
+    min-width: 580px;
+  }
+
+  //user info box
+  #user-info{
+    @include info(#F9F9F9);
+    min-width: 175px;
+    margin-top:2px;
+    p{
+      margin: 5px;
+    }
+  }
+
+  #pref-bin{
+    @include clearfix;
+  }
+
+  #pref-trash, #pref-key{
+    @include pref-box;
+    margin-top:5px;
+  }
+
+  #pref-key {
+    padding: 5px;
+    text-align: center;
+    #orange_color, #blue_color {
+      height: 10px;
+      width: 10px;
+      display: inline-block;
+    }
+    #orange_color { @include info($select-color); }
+    #blue_color { @include info($table-hd-color); }
+  }
+
+  #actual-trash{
+    div:not(#trash){
+      display:none;
+    }
+  }
+
+  #pref-col-info{
+    padding:5px;
+    @include info(#F9F9F9);
+    min-width: 300px;
+  }
+
+  #zookeeper-pref{
+    @include pref-box;
+    @include info(#F9F9F9);
+    display:inline-block;
+    padding:5px;
+    margin-left:10px;
+    width:300px;
+    #zookeeper_submit{
+      width:75px;
+    }
+  }
+
+  #pref-col{ @include pref-box; }
+  #pref-title{
+    h3{ text-align: center; }
+    .loading-spinner { margin-left: 20px; float: left; }
+  }
+  .hidden-spinner {
+    .loading-spinner { display: none !important; }
+    h3 { margin-left: 36px; } }
+
+  #opt-col{
+    @include info(white);
+    @include pref-box;
+    float: right;
+  }
+
+  .fam{
+    padding:5px;
+    margin:5px;
+    cursor:pointer;
+    padding: 2px;
+    margin:2px;
+    @include info($table-hd-color);
+  }
+
+  .section-label{ text-align:center; }
+  .my-select{ background-color:$select-color; }
+  #no-saved, #trash{
+    text-align:center;
+    font-weight:200;
+  }
+
+  .sel-fam{
+    cursor:grab;
+    cursor:grab;
+    cursor:-moz-grab;
+    cursor:-webkit-grab;
+
+    @include info($select-color);
+    padding:2px;
+    margin:2px;
+  }
+  .inputs-list{
+    list-style-type: none;
+    li{
+      padding: 5px 0 5px 0;
+      input[type=checkbox]{
+        display: inline-block;
+      }
+    }
+  }
+  .table-filter{
+    input[type=submit]{
+      margin-bottom: 9px;
+    }
+  }
+  .clarification{
+    margin-bottom: 25px;
+  }
+  .filter-header{
+    margin-top: 45px;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/zookeeper.scss
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/zookeeper.scss b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/zookeeper.scss
new file mode 100644
index 0000000..6c94735
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/assets/stylesheets/zookeeper.scss
@@ -0,0 +1,142 @@
+/**
+ * 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.
+ */
+$opacity-adjust: 0;
+#zookeeper_wrapper {
+  i { cursor: pointer; }
+  $header-padding: 20px;
+  margin-top: 2em;
+  #blur, #zookeeper{ margin-bottom: 2em;}
+  #zookeeper {
+    @include border-radius();
+    opacity: .9;
+    height: 60px;
+    width: 500px;
+    margin-left:auto;
+    margin-right:auto;   
+    h2 {
+      font-size: 20px;
+      padding: 10px 10px 0px;
+      color: white;
+      line-height: 40px;
+      @include box-sizing(border-box);
+      height: 100%;
+      position: relative;
+      top: -10px;
+      
+      .nodes {
+        position: relative;
+        bottom: 20px;
+        font-size: 12px;
+        opacity: .8;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        overflow: hidden;
+
+        span{
+          cursor: pointer;
+        }
+      }
+      
+      i {
+        position: absolute;
+        top: 15px;
+        right: 5px;
+      }
+    }
+
+  }
+  #blur {
+    #controllers, #clusters{ padding: 5px; @include box-sizing(border-box); min-width: 550; border-top: 1px solid #CCCCCC;}
+    thead{
+      background-color: whitesmoke;
+    }
+
+    table tbody tr{
+      &.no_children{
+        display: none;
+      }
+      &.error{
+        &:hover{
+          td{
+            background-color: #EBCCCC;
+          }
+        }
+        td{
+          background-color: #F2DEDE;
+        }
+      }
+
+      &.warning{
+        &:hover{
+          td{
+            background-color: #FAF2CC;
+          }
+        }
+        td{
+          background-color: #FCF8E3;
+        }
+      }  
+      
+      td{
+
+        a {
+          text-decoration: none;
+          cursor: pointer;
+        }
+        
+        .noColor{
+          background-color: transparent;
+          color:black;
+        }
+        color{
+          //color: rgba(125, 199, 125, 1);
+          font-weight: bold;
+        }
+      }
+      
+      td:last-child { text-align: center; width: 34px; }
+    }
+    ul{ list-style-type: none; }
+    .blur_container{ margin-bottom: 2em }
+  }
+  .status{ width:75px; @include zoo-status;}
+
+  h3 { margin-top: 0.5em; border-bottom: $twitter-border;}
+  
+  .noController{
+    position: relative;
+    top: 40px;
+    font-size: 20px;
+    color: #93A7AC;
+  }
+  .subHeaders{
+    display: inline-block;
+    font-size: 24px;
+    font-weight: bold;
+    color: #93A7AC;
+    background: none repeat scroll 0 0 #FFFFFF;
+    position: relative;
+    top: -16px;
+    left: 10px;    
+  }
+  
+  .row{
+    margin-left:auto;
+    margin-right:auto;
+    width: 1200px;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/controllers/admin_settings_controller.rb
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/controllers/admin_settings_controller.rb b/contrib/blur-console-v1/blur-admin/app/controllers/admin_settings_controller.rb
new file mode 100644
index 0000000..a358266
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/controllers/admin_settings_controller.rb
@@ -0,0 +1,26 @@
+# 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.
+class AdminSettingsController < ApplicationController
+  respond_to :html
+
+  def update
+    search_filter = AdminSetting.find_or_create_by_setting(params[:setting])
+    search_filter.value = params[:value]
+    search_filter.save
+    respond_with do |format|
+      format.html { render :nothing => true }
+    end
+  end
+end
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/controllers/application_controller.rb
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/controllers/application_controller.rb b/contrib/blur-console-v1/blur-admin/app/controllers/application_controller.rb
new file mode 100644
index 0000000..b784087
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/controllers/application_controller.rb
@@ -0,0 +1,131 @@
+# 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.
+class ApplicationController < ActionController::Base
+  protect_from_forgery
+
+  before_filter :lock_down_api
+
+  respond_to :html, :only => :help
+
+  require 'thrift/blur'
+  require 'blur_thrift_client'
+
+  helper_method :current_user
+
+  enable_authorization do |exception|
+    if current_user
+      if can? :index, :zookeepers
+        redirect_to root_url, :alert => "Unauthorized"
+      else
+        redirect_to logout_url, :alert => "Unauthorized"
+      end
+    else
+      redirect_to login_path, :alert => "Please login"
+    end
+  end
+
+  def current_user
+    @current_user ||= current_user_session && current_user_session.user
+  end
+
+  def help
+    @tab = params['tab']
+    respond_to do |format|
+      format.any  { render :partial => 'layouts/help_menu' }
+    end
+  end
+
+  # Populates the @current_zookeeper instance variable
+  def current_zookeeper
+    # Find the zookeeper with the given or the stored session id
+    @current_zookeeper ||= Zookeeper.find_by_id(params[:zookeeper_id] || session[:current_zookeeper_id])
+    if @current_zookeeper.nil?
+      zookeeper_error
+    else
+      # Set the zookeeper
+      set_zookeeper @current_zookeeper.id
+    end
+    @current_zookeeper
+  end
+
+  def set_zookeeper(id)
+    # Convert all inputs to an int
+    id = id.to_i
+    # Avoids a DB hit if the id is unchanged
+    session[:current_zookeeper_id] = id if session[:current_zookeeper_id] != id
+  end
+
+  private
+
+  # Populates the session id with your preference zookeeper id
+  def set_zookeeper_with_preference
+    user_zk_pref = current_user.zookeeper_preference
+
+    if user_zk_pref.name.to_i > 0 # If your preference is not the default
+      # If your preferred zookeeper doesnt exist
+      if Zookeeper.find_by_id(user_zk_pref.value).nil?
+        flash[:error] = "Your preferred Zookeeper no longer exists, your preference has been reset!"
+        # Reset their preference to the default
+        user_zk_pref.name = 0
+        user_zk_pref.save
+      else
+        set_zookeeper user_zk_pref.value
+      end
+    end
+  end
+
+  # Populates the @zookeepers instance variable for option select
+  def zookeepers
+    @zookeepers ||= Zookeeper.order 'name'
+  end
+
+  def current_user_session
+    @current_user_session ||= UserSession.find
+  end
+
+  ### Application Wide Error Handling ###
+  #Locks the actions to their defined "formats"
+  def lock_down_api
+    action = params[:action]
+    # When the format is blank it is an http request
+    format = (params[:format] || :html).to_sym
+    # Respond to specific format and hash of actions
+    accepted_actions = mimes_for_respond_to[format]
+    error = true
+
+    # If the action doesnt respond to that format
+    if !accepted_actions.nil?
+      if accepted_actions[:except]
+        error = accepted_actions[:except].include?(action)
+      elsif accepted_actions[:only]
+        error = !accepted_actions[:only].include?(action)
+      else
+        error = false
+      end
+    end
+
+    raise "Unaccepted Format for this Action!" if error
+  end
+
+  # Error message for incorrect zookeeper find
+  def zookeeper_error
+    if request.xhr?
+      render :status => :conflict, :text => "No Current Zookeeper"
+    else
+      flash[:error] = "A Zookeeper with that id does not exist!"
+      redirect_to root_path
+    end
+  end
+end

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/controllers/audits_controller.rb
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/controllers/audits_controller.rb b/contrib/blur-console-v1/blur-admin/app/controllers/audits_controller.rb
new file mode 100644
index 0000000..15ca0f0
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/controllers/audits_controller.rb
@@ -0,0 +1,25 @@
+# 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.
+class AuditsController < ApplicationController
+  respond_to :json, :html
+
+  def index
+    from = params[:from] || 48  # Use the given min time or the default 48 hours
+    to = params[:to] || 0       # Use the given max time or the default (now)
+    @audits = Audit.recent from.to_i, to.to_i
+
+    respond_with(@audits)
+  end
+end

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/11a2529a/contrib/blur-console-v1/blur-admin/app/controllers/blur_controllers_controller.rb
----------------------------------------------------------------------
diff --git a/contrib/blur-console-v1/blur-admin/app/controllers/blur_controllers_controller.rb b/contrib/blur-console-v1/blur-admin/app/controllers/blur_controllers_controller.rb
new file mode 100644
index 0000000..83be286
--- /dev/null
+++ b/contrib/blur-console-v1/blur-admin/app/controllers/blur_controllers_controller.rb
@@ -0,0 +1,29 @@
+# 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.
+class BlurControllersController < ApplicationController
+  load_and_authorize_resource
+  
+  respond_to :json
+
+  def destroy
+    raise "Cannot Remove A Controller that is online!" if @blur_controller.controller_status == 1
+    @blur_controller.destroy
+    Audit.log_event(current_user, "Controller (#{@blur_controller.node_name}) was forgotten",
+                    "controller", "delete", @blur_controller.zookeeper) if @blur_controller.destroyed?
+    respond_with(@blur_controller) do |format|
+      format.json
+    end
+  end
+end
\ No newline at end of file


Mime
View raw message