You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by ja...@apache.org on 2014/06/12 18:35:03 UTC

[12/24] git commit: DRILL-964: Allow enabling/disabling storage plugin instance from UI

DRILL-964: Allow enabling/disabling storage plugin instance from UI

+ Creating a client per request (to avoid issues with multiple connections).
+ Correcting the links.
+ Searchable result table.
+ Minor UI tweaks.

Squashed commits:
[461182d]
[99a678a]
[2c16c3a]


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

Branch: refs/heads/master
Commit: 0879f830068e0282884b55812f4a4fba0311a63f
Parents: 2903ed3
Author: Sudheesh Katkam <sk...@maprtech.com>
Authored: Tue Jun 10 12:13:56 2014 -0700
Committer: Jacques Nadeau <ja...@apache.org>
Committed: Wed Jun 11 16:08:16 2014 -0700

----------------------------------------------------------------------
 .../drill/exec/server/rest/DrillRestServer.java |  5 ---
 .../drill/exec/server/rest/QueryResources.java  | 10 ++++-
 .../drill/exec/server/rest/StatusResources.java |  2 +-
 .../exec/server/rest/StorageResources.java      | 29 ++++++++++++--
 .../src/main/resources/rest/generic.ftl         |  6 +--
 .../src/main/resources/rest/profile/list.ftl    |  4 +-
 .../src/main/resources/rest/profile/profile.ftl |  4 --
 .../src/main/resources/rest/query/result.ftl    | 33 +++++++++++++---
 .../src/main/resources/rest/storage/list.ftl    | 22 ++++-------
 .../src/main/resources/rest/storage/update.ftl  | 41 ++++++++++----------
 10 files changed, 95 insertions(+), 61 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/0879f830/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/DrillRestServer.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/DrillRestServer.java b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/DrillRestServer.java
index c3c7b04..11bb776 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/DrillRestServer.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/DrillRestServer.java
@@ -64,10 +64,6 @@ public class DrillRestServer extends ResourceConfig {
       register(provider);
     }
 
-    final DrillConfig config = workManager.getContext().getConfig();
-    final BufferAllocator allocator = workManager.getContext().getAllocator();
-    final ClusterCoordinator coordinator = workManager.getContext().getClusterCoordinator();
-    final DrillClient client = new DrillClient(config, coordinator, allocator);
     register(new AbstractBinder() {
       @Override
       protected void configure() {
@@ -75,7 +71,6 @@ public class DrillRestServer extends ResourceConfig {
         bind(workManager.getContext().getConfig().getMapper()).to(ObjectMapper.class);
         bind(workManager.getContext().getPersistentStoreProvider()).to(PStoreProvider.class);
         bind(workManager.getContext().getStorage()).to(StoragePluginRegistry.class);
-        bind(client).to(DrillClient.class);
       }
     });
   }

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/0879f830/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/QueryResources.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/QueryResources.java b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/QueryResources.java
index f444a02..9c1dce1 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/QueryResources.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/QueryResources.java
@@ -31,8 +31,11 @@ import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 
+import org.apache.drill.common.config.DrillConfig;
 import org.apache.drill.exec.client.DrillClient;
+import org.apache.drill.exec.coord.ClusterCoordinator;
 import org.apache.drill.exec.exception.SchemaChangeException;
+import org.apache.drill.exec.memory.BufferAllocator;
 import org.apache.drill.exec.proto.UserBitShared;
 import org.apache.drill.exec.record.RecordBatchLoader;
 import org.apache.drill.exec.record.VectorWrapper;
@@ -50,8 +53,6 @@ public class QueryResources {
 
   @Inject
   WorkManager work;
-  @Inject
-  DrillClient client;
 
   @GET
   @Produces(MediaType.TEXT_HTML)
@@ -63,6 +64,11 @@ public class QueryResources {
   @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
   @Produces(MediaType.TEXT_HTML)
   public Viewable submitQuery(@FormParam("query") String query, @FormParam("queryType") String queryType) throws Exception {
+    final DrillConfig config = work.getContext().getConfig();
+    final ClusterCoordinator coordinator = work.getContext().getClusterCoordinator();
+    final BufferAllocator allocator = work.getContext().getAllocator();
+    DrillClient client = new DrillClient(config, coordinator, allocator);
+
     UserBitShared.QueryType type = UserBitShared.QueryType.SQL;
     switch (queryType){
       case "SQL" : type = UserBitShared.QueryType.SQL; break;

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/0879f830/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/StatusResources.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/StatusResources.java b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/StatusResources.java
index c98c8e6..4ec4182 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/StatusResources.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/StatusResources.java
@@ -32,7 +32,7 @@ public class StatusResources {
   @Produces(MediaType.TEXT_HTML)
   public Viewable getStatus() {
     String status = "Running!";
-    return new Viewable("/rest/status/status.ftl", status);
+    return new Viewable("/rest/status.ftl", status);
   }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/0879f830/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/StorageResources.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/StorageResources.java b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/StorageResources.java
index 244d8a8..aa090cf 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/StorageResources.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/StorageResources.java
@@ -19,6 +19,8 @@ package org.apache.drill.exec.server.rest;
 
 import java.io.IOException;
 import java.io.StringReader;
+import java.net.URI;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -30,7 +32,10 @@ import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
 
 import org.apache.drill.common.exceptions.ExecutionSetupException;
 import org.apache.drill.common.logical.StoragePluginConfig;
@@ -59,12 +64,15 @@ public class StorageResources {
   @Produces(MediaType.TEXT_HTML)
   public Viewable getQueries() {
 
-    List<String> names = Lists.newArrayList();
+    List<SimpleHash> list = Lists.newArrayList();
     for (Map.Entry<String, StoragePluginConfig> config : storage.getStore()) {
-      names.add(config.getKey());
+      SimpleHash map = new SimpleHash();
+      map.put("name", config.getKey());
+      map.put("enabled", config.getValue().isEnabled());
+      list.add(map);
     }
 
-    return new Viewable("/rest/storage/list.ftl", names);
+    return new Viewable("/rest/storage/list.ftl", list);
   }
 
   @GET
@@ -78,10 +86,25 @@ public class StorageResources {
     map.put("config", conf);
     map.put("name", name);
     map.put("exists", config != null);
+    map.put("enabled", config.isEnabled());
     return new Viewable("/rest/storage/update.ftl", map);
   }
 
   @GET
+  @Path("/{name}/enable/{val}")
+  @Produces(MediaType.TEXT_HTML)
+  public Response setEnable(@Context UriInfo uriInfo, @PathParam("name") String name, @PathParam("val") Boolean enable) throws ExecutionSetupException {
+    StoragePluginConfig config = findConfig(name);
+    if (config != null) {
+      config.setEnabled(enable);
+      storage.createOrUpdate(name, config, true);
+    }
+
+    URI uri = uriInfo.getBaseUriBuilder().path("/storage").build();
+    return Response.seeOther(uri).build();
+  }
+
+  @GET
   @Produces(MediaType.APPLICATION_JSON)
   @Path("/{name}/config")
   public StoragePluginConfig getConfig(@PathParam("name") String name) {

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/0879f830/exec/java-exec/src/main/resources/rest/generic.ftl
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/resources/rest/generic.ftl b/exec/java-exec/src/main/resources/rest/generic.ftl
index aad0794..1a47915 100644
--- a/exec/java-exec/src/main/resources/rest/generic.ftl
+++ b/exec/java-exec/src/main/resources/rest/generic.ftl
@@ -25,9 +25,9 @@
       <title>Apache Drill</title>
 
       <link href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
-      <link href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap-theme.min.css" rel="stylesheet">
 
-      <link href="theme.css" rel="stylesheet">
+      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+      <script src="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
 
       <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
       <!--[if lt IE 9]>
@@ -67,8 +67,6 @@
       <div class="container theme-showcase" role="main">
         <@page_body/>
       </div>
-      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
-      <script src="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
     </body>
   </html>
 </#macro>

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/0879f830/exec/java-exec/src/main/resources/rest/profile/list.ftl
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/resources/rest/profile/list.ftl b/exec/java-exec/src/main/resources/rest/profile/list.ftl
index ebd9f7a..61d3466 100644
--- a/exec/java-exec/src/main/resources/rest/profile/list.ftl
+++ b/exec/java-exec/src/main/resources/rest/profile/list.ftl
@@ -29,7 +29,7 @@
         <tr>
           <td>${query.getValue()}</td>
           <td>
-            <a href="/query/${query.getKey()}">
+            <a href="/profiles/${query.getKey()}">
               <div style="height:100%;width:100%">
                 ${query.getKey()}
               </div>
@@ -52,7 +52,7 @@
         <tr>
           <td>${query.getValue()}</td>
           <td>
-            <a href="/profile/${query.getKey()}">
+            <a href="/profiles/${query.getKey()}">
               <div style="height:100%;width:100%">
                 ${query.getKey()}
               </div>

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/0879f830/exec/java-exec/src/main/resources/rest/profile/profile.ftl
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/resources/rest/profile/profile.ftl b/exec/java-exec/src/main/resources/rest/profile/profile.ftl
index d4035ae..ffd22db 100644
--- a/exec/java-exec/src/main/resources/rest/profile/profile.ftl
+++ b/exec/java-exec/src/main/resources/rest/profile/profile.ftl
@@ -47,15 +47,11 @@
   <div class="page-header">
     <h2>Physical Plan</h2>
   </div>
-  <div class="well">
     <p><pre>${model.plan}</pre></p>
-  </div>
   <div class="page-header">
     <h2>Complete Profile</h2>
   </div>
-  <div class="well">
     <p><pre>${model.toString()}</pre></p>
-  </div>
 </#macro>
 
 <@page_html/>

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/0879f830/exec/java-exec/src/main/resources/rest/query/result.ftl
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/resources/rest/query/result.ftl b/exec/java-exec/src/main/resources/rest/query/result.ftl
index e608650..bedbf9f 100644
--- a/exec/java-exec/src/main/resources/rest/query/result.ftl
+++ b/exec/java-exec/src/main/resources/rest/query/result.ftl
@@ -11,6 +11,12 @@
 
 <#include "*/generic.ftl">
 <#macro page_head>
+  <link rel="stylesheet" type="text/css" href="//code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css">
+  <link rel="stylesheet" type="text/css" href="//cdn.datatables.net/plug-ins/be7019ee387/integration/jqueryui/dataTables.jqueryui.css">
+
+  <script type="text/javascript" language="javascript" src="//code.jquery.com/jquery-1.10.2.min.js"></script>
+  <script type="text/javascript" language="javascript" src="//cdn.datatables.net/1.10.0/js/jquery.dataTables.min.js"></script>
+  <script type="text/javascript" language="javascript" src="//cdn.datatables.net/plug-ins/be7019ee387/integration/jqueryui/dataTables.jqueryui.js"></script>
 </#macro>
 
 <#macro page_body>
@@ -18,19 +24,34 @@
   <div class="page-header">
   </div>
   <h2>Result</h2>
-  <div class="table-responsive">
-    <table class="table">
-      <tbody>
-        <#list model as rows>
+  <div style="width=100%; overflow: auto;">
+    <table id="relation" class="table table-striped table-bordered table-condensed" style="display: table; table-layout: fized; width=100%;">
+      <#assign rows = model[0]>
+      <thead style="overflow: auto;">
         <tr>
           <#list rows as row>
-          <td style="border:none;"><pre>${row}</pre></td>
+          <th>${row}</th>
           </#list>
         </tr>
-        </#list>
+      </thead>
+      <tbody style="overflow: auto;">
+      <#list model as rows>
+        <#if (rows_index > 0)>
+          <tr>
+            <#list rows as row>
+            <td>${row}</td>
+            </#list>
+          </tr>
+        </#if>
+      </#list>
       </tbody>
     </table>
   </div>
+  <script charset="utf-8">
+    $(document).ready(function() {
+      $('#relation').dataTable( { "scrollX" : true } );
+    } );
+  </script>
 </#macro>
 
 <@page_html/>

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/0879f830/exec/java-exec/src/main/resources/rest/storage/list.ftl
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/resources/rest/storage/list.ftl b/exec/java-exec/src/main/resources/rest/storage/list.ftl
index 6afe4b5..5e50616 100644
--- a/exec/java-exec/src/main/resources/rest/storage/list.ftl
+++ b/exec/java-exec/src/main/resources/rest/storage/list.ftl
@@ -24,17 +24,15 @@
         <#list model as plugin>
         <tr>
           <td style="border:none;">
-            ${plugin}
+            ${plugin.name}
           </td>
           <td style="border:none;">
-            <form action="/storage/${plugin}/config">
-              <button class="btn btn-default" type="submit">View</button>
-            </form>
-          </td>
-          <td style="border:none;">
-            <form action="/storage/${plugin}/config/update">
-              <button class="btn btn-primary" type="submit">Update</button>
-            </form>
+            <a class="btn btn-primary" href="/storage/${plugin.name}/config/update">Update</a>
+            <#if plugin.enabled>
+              <a class="btn btn-default" href="/storage/${plugin.name}/enable/false">Disable</a>
+            <#else>
+              <a class="btn btn-primary" href="/storage/${plugin.name}/enable/true">Enable</a>
+            </#if>
           </td>
         </tr>
         </#list>
@@ -55,13 +53,9 @@
           form.submit();
         }
       </script>
-      <button type="submit" class="btn btn-default" onclick="javascript:doSubmit();">Submit</button>
+      <button type="submit" class="btn btn-default" onclick="javascript:doSubmit();">Create</button>
     </form>
   </div>
-  <script>
-      var elem = document.getElementById("statusFontColor");
-      elem.style.color = "green";
-  </script>
 </#macro>
 
 <@page_html/>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/0879f830/exec/java-exec/src/main/resources/rest/storage/update.ftl
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/resources/rest/storage/update.ftl b/exec/java-exec/src/main/resources/rest/storage/update.ftl
index a76d750..ae60852 100644
--- a/exec/java-exec/src/main/resources/rest/storage/update.ftl
+++ b/exec/java-exec/src/main/resources/rest/storage/update.ftl
@@ -19,27 +19,28 @@
   </div>
   <h3>Configuration</h3>
   <form role="form" action="/storage/config/update" method="POST">
-   <input type="hidden" name="name" value="${model.name}" />
-   <div class="form-group">
-      <textarea class="form-control" id="config" rows="20" cols="50" name="config">${model.config}</textarea>
-   </div>
-   <button class="btn btn-default" type="submit">
-     <#if model.exists >Update<#else>Create</#if>
-   </button>
+    <input type="hidden" name="name" value="${model.name}" />
+    <div class="form-group">
+      <textarea class="form-control" id="config" rows="20" cols="50" name="config" style="font-family: Courier;">${model.config}</textarea>
+    </div>
+    <a class="btn btn-default" href="/storage">Back</a>
+    <button class="btn btn-default" type="submit">
+      <#if model.exists >Update<#else>Create</#if>
+    </button>
+    <#if model.enabled>
+      <a class="btn btn-default" href="/storage/${model.name}/enable/false">Disable</a>
+    <#else>
+      <a class="btn btn-primary" href="/storage/${model.name}/enable/true">Enable</a>
+    </#if>
+    <#if model.exists >
+      <form role="form" action="/storage/config/delete" method="POST">
+        <input type="hidden" name="name" value="${model.name}" />
+        <button type="submit" class="btn btn-default" onclick="return confirm('Are you sure?')">
+        Delete
+        </button>
+      </form>
+    </#if>
   </form>
-  <br/>
-  <#if model.exists >
-    <form role="form" action="/storage/config/delete" method="POST">
-      <input type="hidden" name="name" value="${model.name}" />
-      <button type="submit" class="btn btn-default" onclick="return confirm('Are you sure?')">
-      Delete
-      </button>
-    </form>
-  </#if>
-  <script>
-      var elem = document.getElementById("statusFontColor");
-      elem.style.color = "green";
-  </script>
 </#macro>
 
 <@page_html/>
\ No newline at end of file