Got the first graph working

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

Branch: refs/heads/blur-console-v2
Commit: de5eb337b3e67059ad75158c4f38e7836745af20
Parents: 7b116c1
Author: Chris Rohr <[email protected]>
Authored: Fri Oct 4 08:18:21 2013 -0400
Committer: Chris Rohr <[email protected]>
Committed: Fri Oct 4 08:18:21 2013 -0400

----------------------------------------------------------------------
 .../org/apache/blur/console/JettyServer.java    |   15 +-
 .../main/java/org/apache/blur/console/Main.java |    5 +-
 .../blur/console/servlets/DashboardServlet.java |   66 +
 .../org/apache/blur/console/util/Config.java    |  109 +
 .../org/apache/blur/console/webapp/index.html   |    4 +-
 .../org/apache/blur/console/webapp/js/app.js    |   32 +-
 .../apache/blur/console/webapp/js/dashboard.js  |   10 +-
 .../console/webapp/js/ui-bootstrap-0.6.0.js     | 3308 ------------------
 8 files changed, 229 insertions(+), 3320 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/de5eb337/contrib/blur-console/src/main/java/org/apache/blur/console/JettyServer.java
----------------------------------------------------------------------
diff --git 
a/contrib/blur-console/src/main/java/org/apache/blur/console/JettyServer.java 
b/contrib/blur-console/src/main/java/org/apache/blur/console/JettyServer.java
index 3b71436..e864639 100644
--- 
a/contrib/blur-console/src/main/java/org/apache/blur/console/JettyServer.java
+++ 
b/contrib/blur-console/src/main/java/org/apache/blur/console/JettyServer.java
@@ -2,15 +2,15 @@ package org.apache.blur.console;
 
 import java.net.URL;
 
+import org.apache.blur.console.servlets.DashboardServlet;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.mortbay.jetty.Server;
+import org.mortbay.jetty.servlet.Context;
+import org.mortbay.jetty.servlet.ServletHolder;
 import org.mortbay.jetty.webapp.WebAppContext;
 
 public class JettyServer {
-       // assumes that this directory contains .html and .jsp files
-       // This is just a directory within your source tree, and can be 
exported as
-       // part of your normal .jar
        private final static String WEBAPPDIR = 
"org/apache/blur/console/webapp";
        private final static String CONTEXTPATH = "/console";
        private final Log log = LogFactory.getLog(JettyServer.class);
@@ -38,15 +38,14 @@ public class JettyServer {
        private void createServer() {
                server = new Server(port);
                
-               // for localhost:port/admin/index.html and whatever else is in 
the webapp directory
+               // for localhost:port/console/index.html and whatever else is 
in the webapp directory
            final URL warUrl = 
this.getClass().getClassLoader().getResource(WEBAPPDIR);
            final String warUrlString = warUrl.toExternalForm();
            server.setHandler(new WebAppContext(warUrlString, CONTEXTPATH));
              
-           // for localhost:port/servlets/cust, etc.
-//         final Context context = new Context(server, "/servlets", 
Context.SESSIONS);
-//         context.addServlet(new ServletHolder(), "/cust");
-//         context.addServlet(new ServletHolder(new UserServlet(whatever)), 
"/user");
+           // for localhost:port/service/dashboard, etc.
+           final Context context = new Context(server, "/service", 
Context.SESSIONS);
+           context.addServlet(new ServletHolder(new DashboardServlet()), 
"/dashboard/*");
              
            try {
                        server.start();

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/de5eb337/contrib/blur-console/src/main/java/org/apache/blur/console/Main.java
----------------------------------------------------------------------
diff --git 
a/contrib/blur-console/src/main/java/org/apache/blur/console/Main.java 
b/contrib/blur-console/src/main/java/org/apache/blur/console/Main.java
index 7600344..192f980 100644
--- a/contrib/blur-console/src/main/java/org/apache/blur/console/Main.java
+++ b/contrib/blur-console/src/main/java/org/apache/blur/console/Main.java
@@ -1,8 +1,11 @@
 package org.apache.blur.console;
 
+import org.apache.blur.console.util.Config;
+
 public class Main {
        public static void main(String[] args) throws Exception {
-               JettyServer server = new JettyServer(8080).start();
+               Config.setupConfig();
+               JettyServer server = new 
JettyServer(Config.getConsolePort()).start();
                server.join();
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/de5eb337/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
new file mode 100644
index 0000000..dc24194
--- /dev/null
+++ 
b/contrib/blur-console/src/main/java/org/apache/blur/console/servlets/DashboardServlet.java
@@ -0,0 +1,66 @@
+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.thrift.BlurClient;
+import org.apache.blur.thrift.generated.Blur.Iface;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.StringUtils;
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+public class DashboardServlet extends HttpServlet {
+       private static final long serialVersionUID = 6522056391102413432L;
+
+       @Override
+       protected void doGet(HttpServletRequest request, HttpServletResponse 
response) throws ServletException, IOException {
+               String path = request.getPathInfo();
+               if ("/controllers/status".equalsIgnoreCase(path)) {
+                       sendControllerStatus(response);
+               } else {
+                       response.setStatus(404);
+                       IOUtils.write("Route [" + path + "] doesn't exist", 
response.getOutputStream());
+               }
+       }
+
+       private void sendControllerStatus(HttpServletResponse response) throws 
IOException {
+               Iface client = 
BlurClient.getClient(StringUtils.join(Config.getControllers(), ","));
+               List<String> controllersFromBlur = new ArrayList<String>();
+               try {
+                       controllersFromBlur = client.controllerServerList();
+               } catch (Exception e) {}
+               
+               int onlineControllers = 
CollectionUtils.intersection(Config.getControllers(), 
controllersFromBlur).size();
+               int offlineControllers = 
CollectionUtils.subtract(Config.getControllers(), 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();
+               response.setContentType("application/json");
+               response.setContentLength(body.getBytes().length);
+               response.setStatus(200);
+               IOUtils.write(body, response.getOutputStream());
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/de5eb337/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
new file mode 100644
index 0000000..5b797f0
--- /dev/null
+++ 
b/contrib/blur-console/src/main/java/org/apache/blur/console/util/Config.java
@@ -0,0 +1,109 @@
+package org.apache.blur.console.util;
+
+import java.io.File;
+import java.io.FileInputStream;
+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.commons.collections.CollectionUtils;
+import org.apache.commons.collections.Predicate;
+import org.apache.commons.collections.Transformer;
+import org.apache.commons.io.IOUtils;
+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;
+       
+       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;
+       }
+       
+       public static void setupConfig() {
+               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));
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/de5eb337/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 dd1c55c..603806d 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
@@ -21,7 +21,8 @@
                         <div id="slow-query-warnings" class="alert 
alert-danger hidden">Warning</div>
                         <div class="row">
                             <div class="col-md-4">
-                                <h3>Controllers</h3>
+                                <h4>Controllers</h4>
+                                <canvas doughnutchart data="controllerData" 
width="200" height="200"></canvas>
                             </div>
                             <div class="col-md-4">
                                 <h3>Shards</h3>
@@ -59,6 +60,7 @@
                <script type="text/javascript" src="js/angular.js"></script>
                <script type="text/javascript" 
src="js/ui-bootstrap-tpls-0.6.0.js"></script>
         <script type="text/javascript" src="js/Chart.js"></script>
+
         <script type="text/javascript" src="js/app.js"></script>
         <script type="text/javascript" src="js/dashboard.js"></script>
        </body>

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/de5eb337/contrib/blur-console/src/main/resources/org/apache/blur/console/webapp/js/app.js
----------------------------------------------------------------------
diff --git 
a/contrib/blur-console/src/main/resources/org/apache/blur/console/webapp/js/app.js
 
b/contrib/blur-console/src/main/resources/org/apache/blur/console/webapp/js/app.js
index d155bdb..3cea194 100644
--- 
a/contrib/blur-console/src/main/resources/org/apache/blur/console/webapp/js/app.js
+++ 
b/contrib/blur-console/src/main/resources/org/apache/blur/console/webapp/js/app.js
@@ -1 +1,31 @@
-var blurApp = angular.module('blurApp', ['ui.bootstrap'])
\ No newline at end of file
+var blurApp = angular.module('blurApp', ['ui.bootstrap'])
+
+blurApp.chart = function (type) {
+    return {
+        restrict: "A",
+        scope: {
+            data: "=",
+            options: "=",
+            id: "@"
+        },
+        link: function ($scope, $elem) {
+            var ctx = $elem[0].getContext("2d");
+            var chart = new Chart(ctx);
+
+            $scope.$watch("data", function (newVal, oldVal) {
+                // if data not defined, exit
+                if (!newVal) return;
+
+                chart[type]($scope.data, $scope.options);
+            }, true);
+        }
+    }
+}
+
+/* Aliases for various chart types */
+blurApp.directive("linechart", function () { return blurApp.chart("Line"); });
+blurApp.directive("barchart", function () { return blurApp.chart("Bar"); });
+blurApp.directive("radarchart", function () { return blurApp.chart("Radar"); 
});
+blurApp.directive("polarchart", function () { return 
blurApp.chart("PolarArea"); });
+blurApp.directive("piechart", function () { return blurApp.chart("Pie"); });
+blurApp.directive("doughnutchart", function () { return 
blurApp.chart("Doughnut"); });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-blur/blob/de5eb337/contrib/blur-console/src/main/resources/org/apache/blur/console/webapp/js/dashboard.js
----------------------------------------------------------------------
diff --git 
a/contrib/blur-console/src/main/resources/org/apache/blur/console/webapp/js/dashboard.js
 
b/contrib/blur-console/src/main/resources/org/apache/blur/console/webapp/js/dashboard.js
index eb9d578..b651ee7 100644
--- 
a/contrib/blur-console/src/main/resources/org/apache/blur/console/webapp/js/dashboard.js
+++ 
b/contrib/blur-console/src/main/resources/org/apache/blur/console/webapp/js/dashboard.js
@@ -1,3 +1,11 @@
-blurApp.controller('DashboardCtrl', function($scope) {
+blurApp.controller('DashboardCtrl', function($scope, $http, $timeout) {
+    $scope.controllerData = [];
+    //$scope.shard
 
+    (function tick() {
+        $http.get('/service/dashboard/controllers/status').success(function 
(data) {
+            $scope.controllerData = data;
+            $timeout(tick, 10000);
+        });
+    })();
 })
\ No newline at end of file


Reply via email to