package com.baidu.disconf.core.common.zookeeper.inner;
import java.nio.charset.Charset;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.data.Stat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* ZK打印
*
* @author liaoqiqi
* @version 2014-7-7
*/
public class PrintZookeeperTree extends ConnectionWatcher {
protected static final Logger LOGGER = LoggerFactory.getLogger(PrintZookeeperTree.class);
private static final Charset CHARSET = Charset.forName("UTF-8");
/**
* @param
*/
public PrintZookeeperTree() {
super(true);
}
public void list(String groupName) throws KeeperException, InterruptedException {
try {
StringBuffer sb = new StringBuffer();
int pathLength = StringUtils.countMatches(groupName, "/");
for (int i = 0; i < pathLength - 1; ++i) {
sb.append("\t");
}
if (groupName != "/") {
String node = StringUtils.substringAfterLast(groupName, "/");
sb.append("|----" + node);
Stat stat = new Stat();
byte[] data = zk.getData(groupName, null, stat);
if (data != null) {
sb.append("\t" + new String(data, CHARSET));
}
if (stat != null) {
sb.append("\t" + stat.getEphemeralOwner());
}
} else {
sb.append(groupName);
}
System.out.println(sb.toString());
List<String> children = zk.getChildren(groupName, false);
for (String child : children) {
if (groupName != "/") {
list(groupName + "/" + child);
} else {
list(groupName + child);
}
}
} catch (KeeperException.NoNodeException e) {
LOGGER.info("Group %s does not exist\n", groupName);
}
}
public static void main(String[] args) throws Exception {
if (args == null || args.length != 1) {
LOGGER.error("PrintZookeeperTree argu error!");
System.exit(2);
}
PrintZookeeperTree printZookeeperTree = new PrintZookeeperTree();
printZookeeperTree.connect(args[0]);
Thread.sleep(2000);
System.out.println("\n\n==================");
printZookeeperTree.list("/");
System.out.println("\n\n==================");
printZookeeperTree.close();
System.out.println("\n\n==================");
}
}