Cleaned up some code

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

Branch: refs/heads/blur-console-v2
Commit: 79df6ba8cb2c9cee66197df6a8f75063ac354317
Parents: 1676142
Author: Chris Rohr <[email protected]>
Authored: Sat Oct 12 14:05:26 2013 -0400
Committer: Chris Rohr <[email protected]>
Committed: Sat Oct 12 14:05:26 2013 -0400

----------------------------------------------------------------------
 .../blur/console/servlets/DashboardServlet.java |   134 +-
 .../org/apache/blur/console/util/Config.java    |    99 +-
 .../org/apache/blur/console/util/HttpUtil.java  |    35 +
 .../org/apache/blur/console/util/NodeUtil.java  |   187 +
 .../org/apache/blur/console/util/TableUtil.java |    97 +
 .../apache/blur/console/webapp/css/console.css  |     4 +
 .../org/apache/blur/console/webapp/index.html   |    28 +-
 .../apache/blur/console/webapp/js/angular.js    | 13122 ++++++++++-------
 .../apache/blur/console/webapp/js/dashboard.js  |    30 +-
 .../console/webapp/partials/dashboard.tpl.html  |    44 +
 10 files changed, 8437 insertions(+), 5343 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/79df6ba8/contrib/blur-console/src/main/java/org/apache/blur/console/servlets/DashboardServlet.java
----------------------------------------------------------------------
diff --git 
a/contrib/blur-console/src/main/java/org/apache/blur/console/servlets/DashboardServlet.java
 
b/contrib/blur-console/src/main/java/org/apache/blur/console/servlets/DashboardServlet.java
index 74dcb6d..9e4001c 100644
--- 
a/contrib/blur-console/src/main/java/org/apache/blur/console/servlets/DashboardServlet.java
+++ 
b/contrib/blur-console/src/main/java/org/apache/blur/console/servlets/DashboardServlet.java
@@ -18,22 +18,17 @@ package org.apache.blur.console.servlets;
  */
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.blur.console.util.Config;
-import org.apache.blur.manager.clusterstatus.ZookeeperClusterStatus;
-import org.apache.blur.thrift.BlurClient;
-import org.apache.blur.thrift.generated.Blur.Iface;
-import org.apache.commons.collections.CollectionUtils;
+import org.apache.blur.console.util.HttpUtil;
+import org.apache.blur.console.util.NodeUtil;
+import org.apache.blur.console.util.TableUtil;
 import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.StringUtils;
-import org.json.JSONArray;
+import org.json.JSONException;
 import org.json.JSONObject;
 
 public class DashboardServlet extends HttpServlet {
@@ -42,91 +37,66 @@ public class DashboardServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse 
response) throws ServletException, IOException {
                String path = request.getPathInfo();
-               if ("/controllers/status".equalsIgnoreCase(path)) {
-                       sendControllerStatus(response);
-               } else if ("/clusters/status".equalsIgnoreCase(path)) {
-                       sendClusterStatus(response);
+               if ("/node/status".equalsIgnoreCase(path)) {
+                       sendNodeStatus(response);
+               } else if ("/table/status".equalsIgnoreCase(path)) {
+                       sendTableStatus(response);
+               } else if ("query/status".equalsIgnoreCase(path)) {
+                       sendQueryStatus(response);
                } else {
                        response.setStatus(404);
                        IOUtils.write("Route [" + path + "] doesn't exist", 
response.getOutputStream());
                }
        }
-
-       private void sendControllerStatus(HttpServletResponse response) throws 
IOException {
-               ZookeeperClusterStatus zk = new 
ZookeeperClusterStatus(Config.getBlurConfig().get("blur.zookeeper.connection"), 
Config.getBlurConfig());
-               
-               //TODO: Fix with another call, this will return online only 
every time
-               List<String> allControllers = zk.getControllerServerList();
-               
-               Iface client = 
BlurClient.getClient(StringUtils.join(allControllers, ","));
-               List<String> controllersFromBlur = new ArrayList<String>();
-               try {
-                       controllersFromBlur = client.controllerServerList();
-               } catch (Exception e) {}
-               
-               
-               int onlineControllers = 
CollectionUtils.intersection(allControllers, controllersFromBlur).size();
-               int offlineControllers = 
CollectionUtils.subtract(allControllers, controllersFromBlur).size();
-               
-               JSONArray data = new JSONArray();
-               
-               try {
-                       JSONObject online = new JSONObject();
-                       online.put("value", onlineControllers);
-                       online.put("color", "#7DC77D");
-                       
-                       JSONObject offline = new JSONObject();
-                       offline.put("value", offlineControllers);
-                       offline.put("color", "#FF1919");
-                       
-                       data.put(online);
-                       data.put(offline);
-               } catch (Exception e) {}
-               
-               String body = data.toString();
+       
+       private void sendError(HttpServletResponse response, Exception e) 
throws IOException {
+               String body = e.getMessage();
                response.setContentType("application/json");
                response.setContentLength(body.getBytes().length);
-               response.setStatus(200);
+               response.setStatus(500);
                IOUtils.write(body, response.getOutputStream());
        }
+
+       private void sendNodeStatus(HttpServletResponse response) throws 
IOException {
+               JSONObject nodeData = new JSONObject();
+
+               try {
+                       nodeData.put("zookeepers", 
NodeUtil.getZookeeperStatus());
+                       nodeData.put("controllers", 
NodeUtil.getControllerStatus());
+                       nodeData.put("clusters", NodeUtil.getClusterStatus());
+               } catch (JSONException e) {
+                       sendError(response, e);
+                       return;
+               }
+
+               HttpUtil.sendResponse(response, nodeData.toString(), 
HttpUtil.JSON);
+       }
        
-       private void sendClusterStatus(HttpServletResponse response) throws 
IOException {
-               ZookeeperClusterStatus zk = new 
ZookeeperClusterStatus(Config.getBlurConfig().get("blur.zookeeper.connection"), 
Config.getBlurConfig());
-               
-               List<String> clusters = zk.getClusterList(false);
-               JSONArray data = new JSONArray();
-               
+       private void sendTableStatus(HttpServletResponse response) throws 
IOException {
+               JSONObject tableData = new JSONObject();
+
                try {
-                       for (String cluster : clusters) {
-                               JSONObject clusterObj = new JSONObject();
-                               clusterObj.put("name", cluster);
-                               
-                               List<String> offlineShardServers = 
zk.getOfflineShardServers(false, cluster);
-                               List<String> onlineShardServers = 
zk.getOnlineShardServers(false, cluster);
-                               
-                               JSONArray clusterData = new JSONArray();
-                               
-                               JSONObject online = new JSONObject();
-                               online.put("value", onlineShardServers.size());
-                               online.put("color", "#7DC77D");
-                               
-                               JSONObject offline = new JSONObject();
-                               offline.put("value", 
offlineShardServers.size());
-                               offline.put("color", "#FF1919");
-                               
-                               clusterData.put(online);
-                               clusterData.put(offline);
-                               clusterObj.put("data", clusterData);
-                               
-                               data.put(clusterObj);
-                       }
-               } catch (Exception e) {}
+                       tableData = TableUtil.getTableStatus();
+               } catch (IOException e) {
+                       throw new IOException(e);
+               } catch (Exception e) {
+                       sendError(response, e);
+                       return;
+               }
+
+               HttpUtil.sendResponse(response, tableData.toString(), 
HttpUtil.JSON);
+       }
+       
+       private void sendQueryStatus(HttpServletResponse response) throws 
IOException {
+               JSONObject nodeData = new JSONObject();
                
+               try {
+                       nodeData.put("fill", "me");
+               } catch (JSONException e) {
+                       sendError(response, e);
+                       return;
+               }
                
-               String body = data.toString();
-               response.setContentType("application/json");
-               response.setContentLength(body.getBytes().length);
-               response.setStatus(200);
-               IOUtils.write(body, response.getOutputStream());
+               HttpUtil.sendResponse(response, nodeData.toString(), 
HttpUtil.JSON);
        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/79df6ba8/contrib/blur-console/src/main/java/org/apache/blur/console/util/Config.java
----------------------------------------------------------------------
diff --git 
a/contrib/blur-console/src/main/java/org/apache/blur/console/util/Config.java 
b/contrib/blur-console/src/main/java/org/apache/blur/console/util/Config.java
index 5e55bd4..563ea14 100644
--- 
a/contrib/blur-console/src/main/java/org/apache/blur/console/util/Config.java
+++ 
b/contrib/blur-console/src/main/java/org/apache/blur/console/util/Config.java
@@ -17,48 +17,18 @@ package org.apache.blur.console.util;
  * limitations under the License.
  */
 
-import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
 import java.util.List;
-import java.util.Properties;
-import java.util.Timer;
-import java.util.TimerTask;
-import java.util.concurrent.TimeUnit;
 
 import org.apache.blur.BlurConfiguration;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.collections.Predicate;
-import org.apache.commons.collections.Transformer;
-import org.apache.commons.io.IOUtils;
+import org.apache.blur.manager.clusterstatus.ZookeeperClusterStatus;
 import org.apache.commons.lang.StringUtils;
 
-import com.google.common.collect.ImmutableList;
-
 public class Config {
-       private static List<String> controllers = new ArrayList<String>();
-       private static List<String> shards = new ArrayList<String>();
-       private static List<String> zookeepers = new ArrayList<String>();
-       
-       private static boolean foundSite = false;
        private static int port = 8080;
        
        private static BlurConfiguration blurConfig;
-       
-       public static Collection<String> getControllers() {
-               return ImmutableList.copyOf(controllers);
-       }
-       public static Collection<String> getShards() {
-               return ImmutableList.copyOf(shards);
-       }
-       public static Collection<String> getZookeepers() {
-               return ImmutableList.copyOf(zookeepers);
-       }
-       public static boolean isBlurConfigured() {
-               return foundSite;
-       }
+
        public static int getConsolePort() {
                return port;
        }
@@ -68,68 +38,11 @@ public class Config {
        
        public static void setupConfig() throws IOException {
                blurConfig = new BlurConfiguration();
-               
-//             String blurHome = System.getenv("BLUR_HOME");
-//             
-//             if (StringUtils.isNotBlank(blurHome)) {
-//                     File blurHomeDir = new File(blurHome + 
"/conf/blur-site.properties");
-//                     if (blurHomeDir.exists()) {
-//                             foundSite = true;
-//                     }
-//                     
-//                     startTimer(blurHome);
-//             }
        }
        
-       private static void startTimer(final String blurHome) {
-               Timer timer = new Timer("BlurSiteReader", true);
-               timer.scheduleAtFixedRate(new TimerTask() {
-                       @Override
-                       public void run() {
-                               try {
-                                       List<String> tmpControllers = 
IOUtils.readLines(new FileInputStream(blurHome + "/conf/controllers"));
-                                       List<String> tmpShards = 
IOUtils.readLines(new FileInputStream(blurHome + "/conf/shards"));
-                                       List<String> tmpZookeepers = 
IOUtils.readLines(new FileInputStream(blurHome + "/conf/zookeepers"));
-                                       
-                                       removeComments(tmpControllers);
-                                       removeComments(tmpShards);
-                                       removeComments(tmpZookeepers);
-                                       
-                                       tmpControllers = new 
ArrayList<String>(fixPorts(tmpControllers, 40010));
-                                       
-                                       controllers = tmpControllers;
-                                       shards = tmpShards;
-                                       zookeepers = tmpZookeepers;
-                                       
-                                       Properties props = new Properties();
-                                       props.load(new FileInputStream(blurHome 
+ "/conf/blur-site.properties"));
-                                       
-                                       port = 
Integer.parseInt(props.getProperty("blur.console.port", "8080"));
-                               } catch (Exception e) {}
-                               
-                       }
-                       
-                       private void removeComments(List<String> list) {
-                               CollectionUtils.filter(list, new Predicate() {
-                                       @Override
-                                       public boolean evaluate(Object line) {
-                                               return 
!StringUtils.startsWith((String) line, "#");
-                                       }
-                               });
-                       }
-                       
-                       @SuppressWarnings("unchecked")
-                       private Collection<String> fixPorts(List<String> list, 
final int port) {
-                               return CollectionUtils.collect(list, new 
Transformer() {
-                                       @Override
-                                       public Object transform(Object input) {
-                                               if (((String) 
input).indexOf(":") > 0) {
-                                                       return input;
-                                               }
-                                               return input + ":" + port;
-                                       }
-                               });
-                       }
-               }, 0, TimeUnit.MINUTES.toMillis(2));
+       public static String getConnectionString() throws IOException {
+               ZookeeperClusterStatus zk = new 
ZookeeperClusterStatus(blurConfig.get("blur.zookeeper.connection"), blurConfig);
+               List<String> allControllers = zk.getControllerServerList();
+               return StringUtils.join(allControllers, ",");
        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/79df6ba8/contrib/blur-console/src/main/java/org/apache/blur/console/util/HttpUtil.java
----------------------------------------------------------------------
diff --git 
a/contrib/blur-console/src/main/java/org/apache/blur/console/util/HttpUtil.java 
b/contrib/blur-console/src/main/java/org/apache/blur/console/util/HttpUtil.java
new file mode 100644
index 0000000..6b502b5
--- /dev/null
+++ 
b/contrib/blur-console/src/main/java/org/apache/blur/console/util/HttpUtil.java
@@ -0,0 +1,35 @@
+/**
+ * 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.
+ */
+
+package org.apache.blur.console.util;
+
+import java.io.IOException;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.io.IOUtils;
+
+public class HttpUtil {
+       public static String JSON = "application/json";
+       
+       public static void sendResponse(HttpServletResponse response, String 
body, String contentType) throws IOException {
+               response.setContentType(contentType);
+               response.setContentLength(body.getBytes().length);
+               response.setStatus(200);
+               IOUtils.write(body, response.getOutputStream());
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/79df6ba8/contrib/blur-console/src/main/java/org/apache/blur/console/util/NodeUtil.java
----------------------------------------------------------------------
diff --git 
a/contrib/blur-console/src/main/java/org/apache/blur/console/util/NodeUtil.java 
b/contrib/blur-console/src/main/java/org/apache/blur/console/util/NodeUtil.java
new file mode 100644
index 0000000..aa16bef
--- /dev/null
+++ 
b/contrib/blur-console/src/main/java/org/apache/blur/console/util/NodeUtil.java
@@ -0,0 +1,187 @@
+/**
+ * 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.
+ */
+
+package org.apache.blur.console.util;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.net.URI;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.blur.manager.clusterstatus.ZookeeperClusterStatus;
+import org.apache.blur.thrift.BlurClient;
+import org.apache.blur.thrift.generated.Blur.Iface;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang.StringUtils;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+public class NodeUtil {
+       @SuppressWarnings("unchecked")
+       public static JSONObject getControllerStatus() throws JSONException, 
IOException {
+               ZookeeperClusterStatus zk = new 
ZookeeperClusterStatus(Config.getBlurConfig().get("blur.zookeeper.connection"),
+                               Config.getBlurConfig());
+
+               // TODO: Fix with another call, this will return online only 
every time
+               List<String> allControllers = zk.getControllerServerList();
+               zk.close();
+
+               Iface client = 
BlurClient.getClient(StringUtils.join(allControllers, ","));
+               List<String> controllersFromBlur = new ArrayList<String>();
+               try {
+                       controllersFromBlur = client.controllerServerList();
+               } catch (Exception e) {
+               }
+               
+               Collection<String> onlineControllers = 
CollectionUtils.intersection(allControllers, controllersFromBlur);
+               Collection<String> offlineControllers = 
CollectionUtils.subtract(allControllers, controllersFromBlur);
+
+               JSONObject data = new JSONObject();
+
+               data.put("online", new JSONArray(onlineControllers));
+               data.put("offline", new JSONArray(offlineControllers));
+
+               JSONArray chartData = new JSONArray();
+
+               JSONObject online = new JSONObject();
+               online.put("value", onlineControllers.size());
+               online.put("color", "#7DC77D");
+
+               JSONObject offline = new JSONObject();
+               offline.put("value", offlineControllers.size());
+               offline.put("color", "#FF1919");
+
+               chartData.put(online);
+               chartData.put(offline);
+
+               data.put("chart", chartData);
+               
+               return data;
+       }
+
+       public static JSONArray getClusterStatus() throws IOException, 
JSONException {
+               ZookeeperClusterStatus zk = new 
ZookeeperClusterStatus(Config.getBlurConfig().get("blur.zookeeper.connection"),
+                               Config.getBlurConfig());
+
+               List<String> clusters = zk.getClusterList(false);
+               JSONArray data = new JSONArray();
+
+               for (String cluster : clusters) {
+                       JSONObject clusterObj = new JSONObject();
+                       clusterObj.put("name", cluster);
+
+                       List<String> offlineShardServers = 
zk.getOfflineShardServers(false, cluster);
+                       List<String> onlineShardServers = 
zk.getOnlineShardServers(false, cluster);
+
+                       clusterObj.put("online", new 
JSONArray(onlineShardServers));
+                       clusterObj.put("offline", new 
JSONArray(offlineShardServers));
+
+                       JSONArray clusterData = new JSONArray();
+
+                       JSONObject online = new JSONObject();
+                       online.put("value", onlineShardServers.size());
+                       online.put("color", "#7DC77D");
+
+                       JSONObject offline = new JSONObject();
+                       offline.put("value", offlineShardServers.size());
+                       offline.put("color", "#FF1919");
+
+                       clusterData.put(online);
+                       clusterData.put(offline);
+                       clusterObj.put("chart", clusterData);
+
+                       data.put(clusterObj);
+               }
+               zk.close();
+
+               return data;
+       }
+
+       public static JSONObject getZookeeperStatus() throws IOException, 
JSONException {
+               String[] connections = 
Config.getBlurConfig().get("blur.zookeeper.connection").split(",");
+               Set<String> onlineZookeepers = new HashSet<String>();
+               Set<String> offlineZookeepers = new HashSet<String>();
+               
+               for (String connection : connections) {
+                       try {
+                               URI parsedConnection = new URI("my://" + 
connection);
+                               String host = parsedConnection.getHost();
+                               int port = parsedConnection.getPort() >= 0 ? 
parsedConnection.getPort() : 2181;
+                               byte[] reqBytes = new byte[4];
+                               ByteBuffer req = ByteBuffer.wrap(reqBytes);
+                               
req.putInt(ByteBuffer.wrap("ruok".getBytes()).getInt());
+                               Socket socket = new Socket();
+                               socket.setSoLinger(false, 10);
+                               socket.setSoTimeout(20000);
+                               parsedConnection.getPort();
+                               socket.connect(new InetSocketAddress(host, 
port));
+
+                               InputStream response = socket.getInputStream();
+                               OutputStream question = 
socket.getOutputStream();
+
+                               question.write(reqBytes);
+
+                               byte[] resBytes = new byte[4];
+
+                               response.read(resBytes);
+                               String status = new String(resBytes);
+                               if (status.equals("imok")) {
+                                       onlineZookeepers.add(connection);
+                               } else {
+                                       offlineZookeepers.add(connection);
+                               }
+                               socket.close();
+                               response.close();
+                               question.close();
+                       } catch (Exception e) {
+                               offlineZookeepers.add(connection);
+                               //log.error("A connection to " + connection + " 
could not be made.", e);
+                       }
+               }
+               
+               JSONObject data = new JSONObject();
+               
+               data.put("online", new JSONArray(onlineZookeepers));
+               data.put("offline", new JSONArray(offlineZookeepers));
+               
+               JSONArray chartData = new JSONArray();
+
+               JSONObject online = new JSONObject();
+               online.put("value", onlineZookeepers.size());
+               online.put("color", "#7DC77D");
+
+               JSONObject offline = new JSONObject();
+               offline.put("value", offlineZookeepers.size());
+               offline.put("color", "#FF1919");
+
+               chartData.put(online);
+               chartData.put(offline);
+
+               data.put("chart", chartData);
+               
+               return data;
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/79df6ba8/contrib/blur-console/src/main/java/org/apache/blur/console/util/TableUtil.java
----------------------------------------------------------------------
diff --git 
a/contrib/blur-console/src/main/java/org/apache/blur/console/util/TableUtil.java
 
b/contrib/blur-console/src/main/java/org/apache/blur/console/util/TableUtil.java
new file mode 100644
index 0000000..ab29f59
--- /dev/null
+++ 
b/contrib/blur-console/src/main/java/org/apache/blur/console/util/TableUtil.java
@@ -0,0 +1,97 @@
+/**
+ * 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.
+ */
+
+package org.apache.blur.console.util;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.blur.thirdparty.thrift_0_9_0.TException;
+import org.apache.blur.thrift.BlurClient;
+import org.apache.blur.thrift.generated.Blur.Iface;
+import org.apache.blur.thrift.generated.BlurException;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+public class TableUtil {
+       public static JSONObject getTableStatus() throws IOException, 
BlurException, TException, JSONException {
+               //TODO: Change this to a stacked bar chart when chart.js 
supports it
+               
+               Iface client = 
BlurClient.getClient(Config.getConnectionString());
+               
+               List<String> clusters = client.shardClusterList();
+               
+               JSONObject data = new JSONObject();
+               JSONArray clusterInfo = new JSONArray();
+               
+               List<Integer> enabledCounts = new ArrayList<Integer>();
+               List<Integer> disabledCounts = new ArrayList<Integer>();
+
+               for (String cluster : clusters) {
+                       JSONObject clusterObj = new JSONObject();
+                       clusterObj.put("name", cluster);
+
+                       List<String> tables = 
client.tableListByCluster(cluster);
+                       
+                       List<String> enabledTables = new ArrayList<String>();
+                       List<String> disabledTables = new ArrayList<String>();
+                       
+                       for (String table : tables) {
+                               boolean enabled = 
client.describe(table).isEnabled();
+                               
+                               if (enabled) {
+                                       enabledTables.add(table);
+                               } else {
+                                       disabledTables.add(table);
+                               }
+                       }
+                       
+                       clusterObj.put("enabled", new JSONArray(enabledTables));
+                       clusterObj.put("disabled", new 
JSONArray(disabledTables));
+                       
+                       enabledCounts.add(enabledTables.size());
+                       disabledCounts.add(disabledTables.size());
+
+                       clusterInfo.put(clusterObj);
+               }
+               
+               JSONObject clusterData = new JSONObject();
+               
+               clusterData.put("labels", new JSONArray(clusters));
+               
+               JSONArray datasets = new JSONArray();
+
+               JSONObject enabled = new JSONObject();
+               enabled.put("data", new JSONArray(enabledCounts));
+               enabled.put("fillColor", "#7DC77D");
+
+               JSONObject disabled = new JSONObject();
+               disabled.put("data", new JSONArray(disabledCounts));
+               disabled.put("fillColor", "#FF1919");
+
+               datasets.put(enabled);
+               datasets.put(disabled);
+               clusterData.put("datasets", datasets);
+               
+               data.put("tables", clusterInfo);
+               data.put("chart", clusterData);
+
+               return data;
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/79df6ba8/contrib/blur-console/src/main/resources/org/apache/blur/console/webapp/css/console.css
----------------------------------------------------------------------
diff --git 
a/contrib/blur-console/src/main/resources/org/apache/blur/console/webapp/css/console.css
 
b/contrib/blur-console/src/main/resources/org/apache/blur/console/webapp/css/console.css
index c90a8ac..b7fc785 100644
--- 
a/contrib/blur-console/src/main/resources/org/apache/blur/console/webapp/css/console.css
+++ 
b/contrib/blur-console/src/main/resources/org/apache/blur/console/webapp/css/console.css
@@ -61,3 +61,7 @@ body { padding-top: 70px; }
     border-color: #ddd transparent #ddd #ddd;
     *border-right-color: #fff;
 }
+
+.center {
+    text-align: center;
+}

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/79df6ba8/contrib/blur-console/src/main/resources/org/apache/blur/console/webapp/index.html
----------------------------------------------------------------------
diff --git 
a/contrib/blur-console/src/main/resources/org/apache/blur/console/webapp/index.html
 
b/contrib/blur-console/src/main/resources/org/apache/blur/console/webapp/index.html
index 3ca5cf9..1e23bf0 100644
--- 
a/contrib/blur-console/src/main/resources/org/apache/blur/console/webapp/index.html
+++ 
b/contrib/blur-console/src/main/resources/org/apache/blur/console/webapp/index.html
@@ -37,33 +37,7 @@ Licensed to the Apache Software Foundation (ASF) under one
             <tabset vertical="true" class="tabs-left">
                 <tab>
                     <tab-heading><i class="icon icon-dashboard" 
title="Dashboard"></i> Dashboard</tab-heading>
-                    <div ng-controller="DashboardCtrl">
-                        <div id="slow-query-warnings" class="alert 
alert-danger hidden">Warning</div>
-                        <div class="row">
-                            <div class="col-md-4 well">
-                                <h4>Controllers</h4>
-                                <canvas doughnutchart data="controllerData" 
width="100" height="100" options="chartOptions"></canvas>
-                            </div>
-                            <div class="col-md-4 well">
-                                <h4>Shards</h4>
-                                <div ng-repeat="cluster in clusters">
-                                       <h5>{{cluster.name}}</h5>
-                                       <canvas doughnutchart 
data="cluster.data" width="75" height="75" options="chartOptions"></canvas>
-                                </div>
-                            </div>
-                            <div class="col-md-4 well">
-                                <h3>Tables</h3>
-                            </div>
-                        </div>
-                        <div class="row">
-                            <div class="col-md-6">
-                                <h3>Queries By Cluster By Minute</h3>
-                            </div>
-                            <div class="col-md-6">
-                                <h3>Average Query Performance By Cluster By 
Minute</h3>
-                            </div>
-                        </div>
-                    </div>
+                    <ng-include 
src="'partials/dashboard.tpl.html'"></ng-include>
                 </tab>
                 <tab>
                     <tab-heading><i class="icon icon-table" 
title="Tables"></i> Tables</tab-heading>

Reply via email to