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