Package com.facebook.zookeeper.cmd

Source Code of com.facebook.zookeeper.cmd.ZNodeDump

/*
* Copyright (C) 2012 Facebook, Inc.
*
* Licensed 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 com.facebook.zookeeper.cmd;

import com.facebook.zookeeper.ZkUtil;
import com.facebook.zookeeper.path.ZkGenericPath;
import com.facebook.zookeeper.convenience.ZkQuickConnectionManager;
import com.facebook.zookeeper.convenience.ZkScript;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Options;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.data.Stat;

import java.util.List;

public class ZNodeDump extends ZkScript {
  public ZNodeDump(ZkQuickConnectionManager zkQuickConnectionManager) {
    super(zkQuickConnectionManager);
  }

  public ZNodeDump() {
    this(new ZkQuickConnectionManager());
  }

  public void dump(String pathStr, int depth, boolean detailed)
    throws InterruptedException, KeeperException {
    ZkGenericPath path = new ZkGenericPath(pathStr);
    dump(path, depth, detailed);
  }

  public void dump(ZkGenericPath path, int depth, boolean detailed)
    throws InterruptedException, KeeperException {
    try {
      print(path.toString(), detailed);
      if (depth > 0) {
        List<String> children = getZk().getChildren(path.toString(), null);
        for (String child : children) {
          dump(path.appendChild(child), depth-1, detailed);
        }
      }
    } catch (KeeperException.NoNodeException e) {
      // Ignore those that were deleted
    }
  }

  private void print(String zNodePath, boolean detailed)
    throws InterruptedException, KeeperException {
    if (detailed) {
      printDetailed(zNodePath);
    } else {
      printSimple(zNodePath);
    }
  }

  private void printSimple(String zNodePath) {
    System.out.println(zNodePath);
  }

  private void printDetailed(String zNodePath)
    throws InterruptedException, KeeperException {
    Stat stat = new Stat();
    byte[] rawData = getZk().getData(zNodePath, null, stat);
    String data =
      (rawData == null) ? "<NULL>" : "'" + ZkUtil.bytesToString(rawData) + "'";
    System.out.print(String.format("%-40s ", zNodePath));
    System.out.print(String.format("Data: %-20s ", data));
    System.out.print(String.format("Data Length: %-5d ", stat.getDataLength()));
    System.out.print(String.format("NumChildren: %-5d ", stat.getNumChildren()));
    System.out.print(String.format("Children Changes: %-20d ", stat.getCversion()));
    System.out.print(String.format("Ephemeral Owner: %-20d ", stat.getEphemeralOwner()));
    System.out.print(String.format("Version: %-20d ", stat.getVersion()));
    System.out.print(String.format("Time Modified: %-20d ", stat.getMtime()));
    System.out.print(String.format("Time Created: %-20d", stat.getCtime()));
    System.out.print("\n");
  }

  @Override
  protected String getName() {
    return ZNodeDump.class.getName();
  }

  @Override
  protected Options getSpecificOptions() {
    Options options = new Options();
    options.addOption(
      "z",
      "zkpath",
      true,
      "ZooKeeper root path to initiate dump [Required]"
    );
    options.addOption(
      "d",
      "depth",
      true,
      "Max descendant depth to traverse [Default: INTEGER_MAX]"
    );
    options.addOption(
      "t",
      "detailed",
      false,
      "Use this flag to print the contents of each ZNode [Default: off]"
    );
    return options;
  }

  @Override
  protected boolean verifySpecificOptions(CommandLine cmd) {
    if (!cmd.hasOption("zkpath")) {
      System.err.println("Error: You must specify a ZooKeeper path.\n");
      return false;
    }
    if (cmd.hasOption("depth")) {
      try {
        if (Integer.parseInt(cmd.getOptionValue("depth")) < 0) {
          System.err.println("Error: depth parameter must be non-negative.\n");
          return false;
        }
      } catch (NumberFormatException e) {
        System.err.println("Error: depth parameter is not an integer.\n");
        return false;
      }
    }
    return true;
  }

  @Override
  protected void runScript(CommandLine cmd) throws Exception {
    String zkPath = cmd.getOptionValue("zkpath");
    int depth =
      cmd.hasOption("depth")
        ? Integer.parseInt(cmd.getOptionValue("depth"))
        : Integer.MAX_VALUE;
    boolean detailed = cmd.hasOption("detailed");
    dump(zkPath, depth, detailed);
  }

  public static void main(String[] args) throws Exception {
    ZkScript script = new ZNodeDump();
    script.runMain(args);
    System.out.println("DONE");
  }
}
TOP

Related Classes of com.facebook.zookeeper.cmd.ZNodeDump

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.