From bc047739818b587a430f8a4a7966485421a00aa5 Mon Sep 17 00:00:00 2001 From: clevertension Date: Thu, 25 Jan 2018 11:29:22 +0800 Subject: [PATCH] add zkRootPath configuration and Search in sub node --- config.cfg | 2 ++ .../java/com/deem/zkui/controller/Home.java | 13 ++++++++++- .../com/deem/zkui/utils/ZooKeeperUtil.java | 23 +++++++++++-------- .../resources/webapp/template/home.ftl.html | 3 ++- 4 files changed, 30 insertions(+), 11 deletions(-) diff --git a/config.cfg b/config.cfg index ec7154f..ec615e2 100644 --- a/config.cfg +++ b/config.cfg @@ -2,6 +2,8 @@ serverPort=9090 #Comma seperated list of all the zookeeper servers zkServer=localhost:2181,localhost:2181 +#the default zk root to show +zkRootPath=/ #Http path of the repository. Ignore if you dont intent to upload files from repository. scmRepo=http://myserver.com/@rev1= #Path appended to the repo url. Ignore if you dont intent to upload files from repository. diff --git a/src/main/java/com/deem/zkui/controller/Home.java b/src/main/java/com/deem/zkui/controller/Home.java index c02afb4..b5f25cc 100644 --- a/src/main/java/com/deem/zkui/controller/Home.java +++ b/src/main/java/com/deem/zkui/controller/Home.java @@ -37,6 +37,7 @@ import javax.servlet.http.HttpServletResponse; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.ZooKeeper; +import org.h2.util.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -56,6 +57,11 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t Map templateParam = new HashMap<>(); String zkPath = request.getParameter("zkPath"); + String zkRootPath = globalProps.getProperty("zkRootPath"); + + if (!StringUtils.isNullOrEmpty(zkRootPath) && (StringUtils.isNullOrEmpty(zkPath) || zkPath.equals("/"))) { + zkPath = zkRootPath; + } String navigate = request.getParameter("navigate"); ZooKeeper zk = ServletUtil.INSTANCE.getZookeeper(request, response, zkServerLst[0], globalProps); List nodeLst; @@ -164,7 +170,12 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) response.sendRedirect("/home?zkPath=" + displayPath); break; case "Search": - Set searchResult = ZooKeeperUtil.INSTANCE.searchTree(searchStr, ServletUtil.INSTANCE.getZookeeper(request, response, zkServerLst[0], globalProps), authRole); + String zkPath = request.getParameter("zkPath"); + String zkRootPath = globalProps.getProperty("zkRootPath"); + if (StringUtils.isNullOrEmpty(zkPath)) { + zkPath = zkRootPath; + } + Set searchResult = ZooKeeperUtil.INSTANCE.searchTree(searchStr, zkPath, ServletUtil.INSTANCE.getZookeeper(request, response, zkServerLst[0], globalProps), authRole); templateParam.put("searchResult", searchResult); ServletUtil.INSTANCE.renderHtml(request, response, templateParam, "search.ftl.html"); break; diff --git a/src/main/java/com/deem/zkui/utils/ZooKeeperUtil.java b/src/main/java/com/deem/zkui/utils/ZooKeeperUtil.java index 3f2b530..37b406e 100644 --- a/src/main/java/com/deem/zkui/utils/ZooKeeperUtil.java +++ b/src/main/java/com/deem/zkui/utils/ZooKeeperUtil.java @@ -20,13 +20,8 @@ import com.deem.zkui.vo.LeafBean; import com.deem.zkui.vo.ZKNode; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.Iterator; -import java.util.List; -import java.util.Set; -import java.util.TreeSet; +import java.util.*; + import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.WatchedEvent; @@ -36,6 +31,7 @@ import org.apache.zookeeper.data.ACL; import org.apache.zookeeper.data.Id; import org.apache.zookeeper.data.Stat; +import org.h2.util.StringUtils; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; @@ -131,17 +127,26 @@ public void setDefaultAcl(String jsonAcl) { defaultAcl = newDefault; } - public Set searchTree(String searchString, ZooKeeper zk, String authRole) throws InterruptedException, KeeperException { + public Set searchTree(String searchString, String zkRootPath, ZooKeeper zk, String authRole) throws InterruptedException, KeeperException { //Export all nodes and then search. + long startTime = System.currentTimeMillis(); Set searchResult = new TreeSet<>(); Set leaves = new TreeSet<>(); - exportTreeInternal(leaves, ZK_ROOT_NODE, zk, authRole); + if (StringUtils.isNullOrEmpty(zkRootPath)) { + zkRootPath = ZK_ROOT_NODE; + } + exportTreeInternal(leaves, zkRootPath, zk, authRole); + long estimatedTime = System.currentTimeMillis() - startTime; + logger.trace("Elapsed Time in Secs for Export Tree Internal: {}, the total search leaves {}" , estimatedTime / 1000, leaves.size()); + startTime = System.currentTimeMillis(); for (LeafBean leaf : leaves) { String leafValue = ServletUtil.INSTANCE.externalizeNodeValue(leaf.getValue()); if (leaf.getPath().contains(searchString) || leaf.getName().contains(searchString) || leafValue.contains(searchString)) { searchResult.add(leaf); } } + long estimatedTime1 = System.currentTimeMillis() - startTime; + logger.trace("Elapsed Time in Secs for Search: {}", estimatedTime1 / 1000); return searchResult; } diff --git a/src/main/resources/webapp/template/home.ftl.html b/src/main/resources/webapp/template/home.ftl.html index 5af7fbe..afb1f19 100644 --- a/src/main/resources/webapp/template/home.ftl.html +++ b/src/main/resources/webapp/template/home.ftl.html @@ -118,12 +118,13 @@