You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lens.apache.org by jd...@apache.org on 2015/06/23 12:25:25 UTC

[37/51] [abbrv] incubator-lens git commit: LENS-25: Print the query execution status on CLI

LENS-25: Print the query execution status on CLI


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

Branch: refs/heads/current-release-line
Commit: 25428747d76428dadeb5a573dc751ed9b4b15432
Parents: 1fde486
Author: Raju Bairishetti <ra...@gmail.com>
Authored: Thu Jun 18 16:41:59 2015 +0530
Committer: Rajat Khandelwal <ra...@gmail.com>
Committed: Thu Jun 18 16:41:59 2015 +0530

----------------------------------------------------------------------
 .../cli/commands/LensConnectionCommands.java    | 125 +++++++++++++++++++
 .../java/org/apache/lens/client/LensClient.java |   6 +
 .../apache/lens/client/LensClientConfig.java    |   2 +-
 .../org/apache/lens/client/LensStatement.java   |  21 ++++
 src/site/apt/user/cli.apt                       |   4 +
 tools/conf-pseudo-distr/client/log4j.properties |  28 ++---
 tools/conf/client/log4j.properties              |  28 ++---
 7 files changed, 183 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/25428747/lens-cli/src/main/java/org/apache/lens/cli/commands/LensConnectionCommands.java
----------------------------------------------------------------------
diff --git a/lens-cli/src/main/java/org/apache/lens/cli/commands/LensConnectionCommands.java b/lens-cli/src/main/java/org/apache/lens/cli/commands/LensConnectionCommands.java
index 675e6c8..8b4face 100644
--- a/lens-cli/src/main/java/org/apache/lens/cli/commands/LensConnectionCommands.java
+++ b/lens-cli/src/main/java/org/apache/lens/cli/commands/LensConnectionCommands.java
@@ -18,6 +18,7 @@
  */
 package org.apache.lens.cli.commands;
 
+import java.util.Enumeration;
 import java.util.List;
 
 import javax.ws.rs.ProcessingException;
@@ -25,6 +26,10 @@ import javax.ws.rs.ProcessingException;
 import org.apache.lens.api.APIResult;
 import org.apache.lens.cli.commands.annotations.UserDocumentation;
 
+import org.apache.lens.client.LensClient;
+
+import org.apache.log4j.*;
+
 import org.springframework.shell.core.ExitShellRequest;
 import org.springframework.shell.core.annotation.CliCommand;
 import org.springframework.shell.core.annotation.CliOption;
@@ -153,6 +158,126 @@ public class LensConnectionCommands extends BaseLensCommand {
   }
 
   /**
+   * Enables to show all class level logs on cli
+   * @param enable
+   */
+  @CliCommand(value = {"debug"}, help = "prints all class level logs and verbose logs on cli for debugging purpose."
+          + " 'debug false'  to turn off all class level logging and verbose level logging ")
+  public void debug(@CliOption(key = {"", "enable"},
+      mandatory = false, unspecifiedDefaultValue = "true",
+      help = "To print all logs on cli for debugging purpose") boolean enable) {
+    Logger logger = LoggerUtil.getRootLogger();
+    Logger cliLogger = LoggerUtil.getCliLogger();
+    if (enable) {
+      LoggerUtil.addConsoleAppenderIfNotPresent(logger);
+      LoggerUtil.addConsoleAppenderIfNotPresent(cliLogger);
+    } else {
+      LoggerUtil.removeConsoleAppender(logger);
+      LoggerUtil.removeConsoleAppender(cliLogger);
+    }
+  }
+
+  /**
+   * Enables to show only cliLogger(verbose) logs on cli
+   * @param enable
+   */
+  @CliCommand(value = {"verbose"}, help = "Show cliLogger logs on cli"
+          + "'verbose false'  turns off the cliLogger logs on console")
+  public void verbose(@CliOption(key = {"", "enable"},
+      mandatory = false, unspecifiedDefaultValue = "true",
+      help = "Print the clilogger logs on cli") boolean enable) {
+    Logger cliLogger = LoggerUtil.getCliLogger();
+    if (enable) {
+      LoggerUtil.addConsoleAppenderIfNotPresent(cliLogger);
+    } else {
+      LoggerUtil.removeConsoleAppender(cliLogger);
+    }
+  }
+
+  private static class LoggerUtil {
+    private static Logger logger;
+    private static Logger cliLogger;
+
+    public static Logger getRootLogger() {
+      if (logger == null) {
+        logger = Logger.getRootLogger();
+      }
+      return logger;
+    }
+
+    public static Logger getCliLogger() {
+      if (cliLogger == null) {
+        cliLogger = Logger.getLogger(LensClient.CLILOGGER);
+      }
+      return cliLogger;
+    }
+
+    public static ConsoleAppender getConsoleAppender() {
+      return getConsoleAppender(getPatternLayout());
+    }
+
+    public static ConsoleAppender getConsoleAppender(Layout layout) {
+      ConsoleAppender consoleAppender = new ConsoleAppender();
+      consoleAppender.setLayout(layout);
+      consoleAppender.activateOptions();
+      return consoleAppender;
+    }
+
+    public static PatternLayout getPatternLayout() {
+      String conversionPattern = "%d [%t] %F %-7p - %m%n";
+      return getPatternLayout(conversionPattern);
+    }
+
+    public static PatternLayout getPatternLayout(String conversionPattern) {
+      PatternLayout layout = new PatternLayout();
+      layout.setConversionPattern(conversionPattern);
+      return layout;
+    }
+
+    /**
+     * Check whether ConsoleAppender was already added
+     * @param logger
+     * @return true   if it was already added
+     *         false  if it does not contain ConsoleAppender
+     */
+    public static void addConsoleAppenderIfNotPresent(Logger logger) {
+      boolean isConsoleAppenderAdded = false;
+      Layout layout = null;
+      Enumeration appenderSeries = logger.getAllAppenders();
+      while (appenderSeries.hasMoreElements()) {
+        Appender appender = (Appender) appenderSeries.nextElement();
+        if (appender instanceof ConsoleAppender) {
+          isConsoleAppenderAdded = true;
+          break;
+        } else {
+          layout = appender.getLayout();
+        }
+      }
+      if (!isConsoleAppenderAdded) {
+        if (layout == null) {
+          layout = LoggerUtil.getPatternLayout();
+        }
+        if (logger.getLevel() == null) {
+          logger.setLevel(Level.DEBUG);
+        }
+        ConsoleAppender consoleAppender = LoggerUtil.getConsoleAppender(layout);
+        logger.addAppender(consoleAppender);
+      }
+    }
+
+    public static void removeConsoleAppender(Logger logger) {
+      Enumeration appenderSeries = logger.getAllAppenders();
+      while (appenderSeries.hasMoreElements()) {
+        Appender appender = (Appender) appenderSeries.nextElement();
+        if (appender instanceof ConsoleAppender) {
+          logger.removeAppender(appender);
+        }
+      }
+    }
+
+  }
+
+  /**
    * Quit shell.
    *
    * @return the exit shell request

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/25428747/lens-client/src/main/java/org/apache/lens/client/LensClient.java
----------------------------------------------------------------------
diff --git a/lens-client/src/main/java/org/apache/lens/client/LensClient.java b/lens-client/src/main/java/org/apache/lens/client/LensClient.java
index 5c3daa8..7399d9e 100644
--- a/lens-client/src/main/java/org/apache/lens/client/LensClient.java
+++ b/lens-client/src/main/java/org/apache/lens/client/LensClient.java
@@ -37,6 +37,8 @@ import lombok.Getter;
 
 public class LensClient {
   private static final Log LOG = LogFactory.getLog(LensClient.class);
+
+  public static final String CLILOGGER =  "cliLogger";
   private static final String DEFAULT_PASSWORD = "";
   private final LensClientConfig conf;
   @Getter
@@ -48,6 +50,10 @@ public class LensClient {
     Maps.newHashMap();
   private final LensStatement statement;
 
+  public static Log getCliLooger() {
+    return LogFactory.getLog(CLILOGGER);
+  }
+
   public LensClient() {
     this(new LensClientConfig());
   }

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/25428747/lens-client/src/main/java/org/apache/lens/client/LensClientConfig.java
----------------------------------------------------------------------
diff --git a/lens-client/src/main/java/org/apache/lens/client/LensClientConfig.java b/lens-client/src/main/java/org/apache/lens/client/LensClientConfig.java
index cf3a97c..edb56ac 100644
--- a/lens-client/src/main/java/org/apache/lens/client/LensClientConfig.java
+++ b/lens-client/src/main/java/org/apache/lens/client/LensClientConfig.java
@@ -49,7 +49,7 @@ public class LensClientConfig extends Configuration {
   private static final String QUERY_POLL_INTERVAL_KEY = CLIENT_PFX + "query.poll.interval";
 
   /** The Constant DEFAULT_QUERY_POLL_INTERVAL. */
-  private static final long DEFAULT_QUERY_POLL_INTERVAL = 10 * 1000L;
+  private static final long DEFAULT_QUERY_POLL_INTERVAL = 10L;
 
   /** The Constant USER_NAME. */
   private static final String USER_NAME = CLIENT_PFX + "user.name";

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/25428747/lens-client/src/main/java/org/apache/lens/client/LensStatement.java
----------------------------------------------------------------------
diff --git a/lens-client/src/main/java/org/apache/lens/client/LensStatement.java b/lens-client/src/main/java/org/apache/lens/client/LensStatement.java
index e2693c9..40e2b86 100644
--- a/lens-client/src/main/java/org/apache/lens/client/LensStatement.java
+++ b/lens-client/src/main/java/org/apache/lens/client/LensStatement.java
@@ -191,10 +191,27 @@ public class LensStatement {
    * @param handle the handle
    */
   public void waitForQueryToComplete(QueryHandle handle) {
+    LensClient.getCliLooger().info("Query handle: " + handle);
     query = getQuery(handle);
+    while (isQueryInQUEUEDSate()) {
+      query = getQuery(handle);
+      LensClient.getCliLooger().debug("Query " + handle + " status: " + query.getStatus());
+      try {
+        Thread.sleep(connection.getLensConnectionParams().getQueryPollInterval());
+      } catch (InterruptedException e) {
+        throw new IllegalStateException(e);
+      }
+    }
+    LensClient.getCliLooger().info("User query: '" + query.getUserQuery()
+      + "' was submitted to " + query.getSelectedDriverClassName());
+    if (query.getDriverQuery() != null) {
+      LensClient.getCliLooger().info(" Driver query: '" + query.getDriverQuery()
+        + "' and Driver handle: " + query.getDriverOpHandle());
+    }
     while (!query.getStatus().finished()
       && !(query.getStatus().toString().equals(Status.CLOSED.toString()))) {
       query = getQuery(handle);
+      LensClient.getCliLooger().info(query.getStatus());
       try {
         Thread.sleep(connection.getLensConnectionParams().getQueryPollInterval());
       } catch (InterruptedException e) {
@@ -203,6 +220,10 @@ public class LensStatement {
     }
   }
 
+  private boolean isQueryInQUEUEDSate() {
+    return query.getStatus().getStatus().equals(QueryStatus.Status.QUEUED);
+  }
+
   /**
    * Gets the query web target.
    *

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/25428747/src/site/apt/user/cli.apt
----------------------------------------------------------------------
diff --git a/src/site/apt/user/cli.apt b/src/site/apt/user/cli.apt
index 20785f1..353c171 100644
--- a/src/site/apt/user/cli.apt
+++ b/src/site/apt/user/cli.apt
@@ -92,6 +92,8 @@ User CLI Commands
 *--+--+
 |close/bye|Releases all resources of the server session and exits the shell|
 *--+--+
+|debug [[--enable] To print all logs on cli for debugging purpose]|prints all class lelvel logs on cli for debugging purpose|
+*--+--+
 |get [--key] \<key\>|Fetches and prints session parameter specified with name <<<key>>> from lens server|
 *--+--+
 |list resources [[--type] \<resource-type\>]|list all resources from session. If type is provided,  lists resources of type <<<resource-type>>>. Valid values for type are jar and file.|
@@ -104,6 +106,8 @@ User CLI Commands
 *--+--+
 |show params|Fetches and prints all session parameter from lens server|
 *--+--+
+|verbose [[--enable] Print the clilogger logs on cli]|Show cliLogger logs for command|
+*--+--+
   <<Lens Connection Commands>>
 
 ===

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/25428747/tools/conf-pseudo-distr/client/log4j.properties
----------------------------------------------------------------------
diff --git a/tools/conf-pseudo-distr/client/log4j.properties b/tools/conf-pseudo-distr/client/log4j.properties
index 5520304..3756cf7 100644
--- a/tools/conf-pseudo-distr/client/log4j.properties
+++ b/tools/conf-pseudo-distr/client/log4j.properties
@@ -19,22 +19,20 @@
 
 
 # Set root logger level to DEBUG and its only appender to A1.
-log4j.rootLogger=INFO, R
-
-# A1 is set to be a ConsoleAppender.
-log4j.appender.A1=org.apache.log4j.ConsoleAppender
+log4j.rootLogger=INFO, root
 
 log4j.category.org.springframework=OFF
 
-# A1 uses PatternLayout.
-log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
-
-log4j.appender.R=org.apache.log4j.RollingFileAppender
-log4j.appender.R.File=${lens.log.dir}/lensclient.log
-log4j.appender.R.layout=org.apache.log4j.PatternLayout
-log4j.appender.R.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} [%t] %-5p %c %x - %m%n
-
-log4j.appender.R.MaxFileSize=100000KB
+log4j.appender.root=org.apache.log4j.RollingFileAppender
+log4j.appender.root.File=${lens.log.dir}/lensclient.log
+log4j.appender.root.layout=org.apache.log4j.PatternLayout
+log4j.appender.root.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} [%t] %-5p %c %x - %m%n
+log4j.appender.root.MaxFileSize=100000KB
 # Keep 20 backup files
-log4j.appender.R.MaxBackupIndex=20
+log4j.appender.root.MaxBackupIndex=20
+
+log4j.category.cliLogger=DEBUG, verboseLogger
+log4j.appender.verboseLogger=org.apache.log4j.ConsoleAppender
+log4j.appender.verboseLogger.layout=org.apache.log4j.PatternLayout
+log4j.appender.verboseLogger.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} [%t] %-5p %c %x - %m%n
+log4j.additivity.cliLogger=false

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/25428747/tools/conf/client/log4j.properties
----------------------------------------------------------------------
diff --git a/tools/conf/client/log4j.properties b/tools/conf/client/log4j.properties
index 5520304..3756cf7 100644
--- a/tools/conf/client/log4j.properties
+++ b/tools/conf/client/log4j.properties
@@ -19,22 +19,20 @@
 
 
 # Set root logger level to DEBUG and its only appender to A1.
-log4j.rootLogger=INFO, R
-
-# A1 is set to be a ConsoleAppender.
-log4j.appender.A1=org.apache.log4j.ConsoleAppender
+log4j.rootLogger=INFO, root
 
 log4j.category.org.springframework=OFF
 
-# A1 uses PatternLayout.
-log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
-
-log4j.appender.R=org.apache.log4j.RollingFileAppender
-log4j.appender.R.File=${lens.log.dir}/lensclient.log
-log4j.appender.R.layout=org.apache.log4j.PatternLayout
-log4j.appender.R.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} [%t] %-5p %c %x - %m%n
-
-log4j.appender.R.MaxFileSize=100000KB
+log4j.appender.root=org.apache.log4j.RollingFileAppender
+log4j.appender.root.File=${lens.log.dir}/lensclient.log
+log4j.appender.root.layout=org.apache.log4j.PatternLayout
+log4j.appender.root.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} [%t] %-5p %c %x - %m%n
+log4j.appender.root.MaxFileSize=100000KB
 # Keep 20 backup files
-log4j.appender.R.MaxBackupIndex=20
+log4j.appender.root.MaxBackupIndex=20
+
+log4j.category.cliLogger=DEBUG, verboseLogger
+log4j.appender.verboseLogger=org.apache.log4j.ConsoleAppender
+log4j.appender.verboseLogger.layout=org.apache.log4j.PatternLayout
+log4j.appender.verboseLogger.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} [%t] %-5p %c %x - %m%n
+log4j.additivity.cliLogger=false