Repository: incubator-slider
Updated Branches:
  refs/heads/develop eb790e780 -> 9f31c5be5


SLIDER-458. Slider CLI help is very verbose


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

Branch: refs/heads/develop
Commit: 9f31c5be505e8cc5926f679c9b56f709cb4de725
Parents: eb790e7
Author: Sumit Mohanty <[email protected]>
Authored: Fri Oct 24 17:03:00 2014 -0700
Committer: Sumit Mohanty <[email protected]>
Committed: Fri Oct 24 17:03:00 2014 -0700

----------------------------------------------------------------------
 .../org/apache/slider/client/SliderClient.java  | 18 ++++++-----
 .../common/params/ActionDiagnosticArgs.java     |  4 +--
 .../apache/slider/common/params/ClientArgs.java |  2 +-
 .../apache/slider/common/params/CommonArgs.java | 33 +++++++++++---------
 .../slider/common/params/SliderActions.java     |  1 -
 .../slider/client/TestClientBadArgs.groovy      |  2 +-
 .../apache/slider/client/TestDiagnostics.groovy |  2 +-
 7 files changed, 35 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/9f31c5be/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/client/SliderClient.java 
b/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
index 66797ae..65eaaff 100644
--- a/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
+++ b/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
@@ -375,7 +375,7 @@ public class SliderClient extends 
AbstractSliderLaunchedService implements RunSe
       exitCode = actionThaw(clusterName, serviceArgs.getActionThawArgs());
     } else if (ACTION_DESTROY.equals(action)) {
       exitCode = actionDestroy(clusterName);
-    } else if (ACTION_DIAGNOSTIC.equals(action)) {
+    } else if (ACTION_DIAGNOSTICS.equals(action)) {
       exitCode = actionDiagnostic(serviceArgs.getActionDiagnosticArgs());
     } else if (ACTION_EXISTS.equals(action)) {
       exitCode = actionExists(clusterName,
@@ -675,8 +675,10 @@ public class SliderClient extends 
AbstractSliderLaunchedService implements RunSe
       throws YarnException, IOException {
 
     Path srcFile = null;
-    if (StringUtils.isEmpty(installKeytabInfo.folder )) {
-      throw new BadCommandArgumentsException("A valid destination keytab 
sub-folder name is required (e.g. 'security').");
+    if (StringUtils.isEmpty(installKeytabInfo.folder)) {
+      throw new BadCommandArgumentsException(
+          "A valid destination keytab sub-folder name is required (e.g. 
'security').\n"
+              + CommonArgs.usage(serviceArgs, ACTION_INSTALL_KEYTAB));
     }
 
     if (StringUtils.isEmpty(installKeytabInfo.keytabUri)) {
@@ -717,8 +719,10 @@ public class SliderClient extends 
AbstractSliderLaunchedService implements RunSe
       IOException {
 
     Path srcFile = null;
-    if (StringUtils.isEmpty(installPkgInfo.name )) {
-      throw new BadCommandArgumentsException("A valid application type name is 
required (e.g. HBASE).");
+    if (StringUtils.isEmpty(installPkgInfo.name)) {
+      throw new BadCommandArgumentsException(
+          "A valid application type name is required (e.g. HBASE).\n"
+              + CommonArgs.usage(serviceArgs, ACTION_INSTALL_PACKAGE));
     }
 
     if (StringUtils.isEmpty(installPkgInfo.packageURI)) {
@@ -2568,7 +2572,7 @@ public class SliderClient extends 
AbstractSliderLaunchedService implements RunSe
         outputExport(publishedExports, registryArgs);
       } else {
         // it's an unknown command
-        log.info(CommonArgs.usage(serviceArgs, ACTION_DIAGNOSTIC));
+        log.info(CommonArgs.usage(serviceArgs, ACTION_DIAGNOSTICS));
         return EXIT_USAGE;
       }
 //      JDK7
@@ -2648,7 +2652,7 @@ public class SliderClient extends 
AbstractSliderLaunchedService implements RunSe
         actionDiagnosticIntelligent(diagnosticArgs);
       } else {
         // it's an unknown option
-        log.info(CommonArgs.usage(serviceArgs, ACTION_DIAGNOSTIC));
+        log.info(CommonArgs.usage(serviceArgs, ACTION_DIAGNOSTICS));
         return EXIT_USAGE;
       }
     } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/9f31c5be/slider-core/src/main/java/org/apache/slider/common/params/ActionDiagnosticArgs.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/common/params/ActionDiagnosticArgs.java
 
b/slider-core/src/main/java/org/apache/slider/common/params/ActionDiagnosticArgs.java
index f48f902..d54aa8e 100644
--- 
a/slider-core/src/main/java/org/apache/slider/common/params/ActionDiagnosticArgs.java
+++ 
b/slider-core/src/main/java/org/apache/slider/common/params/ActionDiagnosticArgs.java
@@ -4,7 +4,7 @@ import com.beust.jcommander.Parameter;
 import com.beust.jcommander.Parameters;
 
 @Parameters(
-  commandNames = {SliderActions.ACTION_DIAGNOSTIC, 
SliderActions.ACTION_DIAGNOSTICS},
+  commandNames = {SliderActions.ACTION_DIAGNOSTICS},
   commandDescription = SliderActions.DESCRIBE_ACTION_DIAGNOSTIC)
 public class ActionDiagnosticArgs extends AbstractActionArgs {
 
@@ -42,7 +42,7 @@ public class ActionDiagnosticArgs extends AbstractActionArgs {
          public String all;
        
          @Parameter(names = {ARG_LEVEL}, 
-             description = "diagnoze the application intelligently")
+             description = "diagnose each slider configuration one by one")
          public String level;
 
          /**

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/9f31c5be/slider-core/src/main/java/org/apache/slider/common/params/ClientArgs.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/common/params/ClientArgs.java 
b/slider-core/src/main/java/org/apache/slider/common/params/ClientArgs.java
index cf8cc2f..5a1c049 100644
--- a/slider-core/src/main/java/org/apache/slider/common/params/ClientArgs.java
+++ b/slider-core/src/main/java/org/apache/slider/common/params/ClientArgs.java
@@ -218,7 +218,7 @@ public class ClientArgs extends CommonArgs {
     } else if (SliderActions.ACTION_DESTROY.equals(action)) {
       bindCoreAction(actionDestroyArgs);
 
-    } else if (SliderActions.ACTION_DIAGNOSTIC.equals(action)) {
+    } else if (SliderActions.ACTION_DIAGNOSTICS.equals(action)) {
       bindCoreAction(actionDiagnosticArgs);
 
     } else if (SliderActions.ACTION_EXISTS.equals(action)) {

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/9f31c5be/slider-core/src/main/java/org/apache/slider/common/params/CommonArgs.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/common/params/CommonArgs.java 
b/slider-core/src/main/java/org/apache/slider/common/params/CommonArgs.java
index 5113617..57d5fb4 100644
--- a/slider-core/src/main/java/org/apache/slider/common/params/CommonArgs.java
+++ b/slider-core/src/main/java/org/apache/slider/common/params/CommonArgs.java
@@ -20,6 +20,7 @@ package org.apache.slider.common.params;
 
 import com.beust.jcommander.JCommander;
 import com.beust.jcommander.Parameter;
+import com.beust.jcommander.ParameterDescription;
 import com.beust.jcommander.ParameterException;
 
 import org.apache.hadoop.conf.Configuration;
@@ -50,7 +51,7 @@ public abstract class CommonArgs extends ArgOps implements 
SliderActions,
   protected static final Logger log = 
LoggerFactory.getLogger(CommonArgs.class);
 
 
-  private static final int DIFF_BETWEEN_DESCIPTION_AND_COMMAND_NAME = 20;
+  private static final int DIFF_BETWEEN_DESCIPTION_AND_COMMAND_NAME = 30;
 
 
   @Parameter(names = ARG_HELP, help = true)
@@ -111,28 +112,32 @@ public abstract class CommonArgs extends ArgOps 
implements SliderActions,
     if (commandOfInterest == null) {
       // JCommander.usage is too verbose for a command with many options like
       // slider no short version of that is found Instead, we compose our msg 
by
-      helperMessage.append("\n");
-      helperMessage.append("Usage: slider COMMAND [options]\n");
+      helperMessage.append("\nUsage: slider COMMAND [options]\n");
       helperMessage.append("where COMMAND is one of\n");
       for (String jcommand : serviceArgs.commander.getCommands().keySet()) {
         helperMessage.append(String.format("\t%-"
-            + DIFF_BETWEEN_DESCIPTION_AND_COMMAND_NAME + "s-%s", jcommand,
+            + DIFF_BETWEEN_DESCIPTION_AND_COMMAND_NAME + "s%s", jcommand,
             serviceArgs.commander.getCommandDescription(jcommand) + "\n"));
       }
       helperMessage
           .append("Most commands print help when invoked without parameters");
       result = helperMessage.toString();
     } else {
-      // Jcommander framework doesn't provide a working API to fetch all 
options
-      // we have to compose options' helper message per action our own
-      serviceArgs.commander.usage(commandOfInterest, helperMessage);
-      // eliminate all linebreaks/tabs as there are too many
-      result = helperMessage.toString().replaceAll("\n|\t|\\s{3,}", " ");
-      // insert linebreak and indents
-      result = result.replaceAll("(--|-D|-S)", "\n\t$1");
-      // put options and their abbreviations on the same line
-      result = result.replaceAll(",\\s*\n\t--", ", --");
-      result = result.replaceAll("Usage:", "\nUsage:");
+      helperMessage.append("\nUsage: slider " + commandOfInterest);
+      helperMessage.append(serviceArgs.coreAction.getMinParams() > 0 ? " 
<application>" : "");
+      helperMessage.append("\n");
+      for (ParameterDescription paramDesc : serviceArgs.commander.getCommands()
+          .get(commandOfInterest).getParameters()) {
+        String optional = paramDesc.getParameter().required() ? "  (required)"
+            : "  (optional)";
+        String paramName = paramDesc.getParameterized().getType() == 
Boolean.TYPE ? paramDesc
+            .getLongestName() : paramDesc.getLongestName() + " <"
+            + paramDesc.getParameterized().getName() + ">";
+        helperMessage.append(String.format("\t%-"
+            + DIFF_BETWEEN_DESCIPTION_AND_COMMAND_NAME + "s%s", paramName,
+            paramDesc.getDescription() + optional + "\n"));
+        result = helperMessage.toString();
+      }
     }
     return result;
   }

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/9f31c5be/slider-core/src/main/java/org/apache/slider/common/params/SliderActions.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/common/params/SliderActions.java 
b/slider-core/src/main/java/org/apache/slider/common/params/SliderActions.java
index 1383bc7..87e4582 100644
--- 
a/slider-core/src/main/java/org/apache/slider/common/params/SliderActions.java
+++ 
b/slider-core/src/main/java/org/apache/slider/common/params/SliderActions.java
@@ -43,7 +43,6 @@ public interface SliderActions {
   String ACTION_STATUS = "status";
   String ACTION_THAW = "start";
   String ACTION_VERSION = "version";
-  String ACTION_DIAGNOSTIC = "diagnostic";
   String ACTION_DIAGNOSTICS = "diagnostics";
   String ACTION_INSTALL_PACKAGE = "install-package";
   String ACTION_INSTALL_KEYTAB = "install-keytab";

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/9f31c5be/slider-core/src/test/groovy/org/apache/slider/client/TestClientBadArgs.groovy
----------------------------------------------------------------------
diff --git 
a/slider-core/src/test/groovy/org/apache/slider/client/TestClientBadArgs.groovy 
b/slider-core/src/test/groovy/org/apache/slider/client/TestClientBadArgs.groovy
index 3f7c50f..8aacf6a 100644
--- 
a/slider-core/src/test/groovy/org/apache/slider/client/TestClientBadArgs.groovy
+++ 
b/slider-core/src/test/groovy/org/apache/slider/client/TestClientBadArgs.groovy
@@ -58,7 +58,7 @@ class TestClientBadArgs extends ServiceLauncherBaseTest {
   public void testActionWithoutOptions() throws Throwable {
     launchExpectingException(SliderClient,
                              new Configuration(),
-                             "Usage: build [options] Options:",
+                             "Usage: slider build <application>",
                              [SliderActions.ACTION_BUILD])
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/9f31c5be/slider-core/src/test/groovy/org/apache/slider/client/TestDiagnostics.groovy
----------------------------------------------------------------------
diff --git 
a/slider-core/src/test/groovy/org/apache/slider/client/TestDiagnostics.groovy 
b/slider-core/src/test/groovy/org/apache/slider/client/TestDiagnostics.groovy
index 57126f8..04f019f 100644
--- 
a/slider-core/src/test/groovy/org/apache/slider/client/TestDiagnostics.groovy
+++ 
b/slider-core/src/test/groovy/org/apache/slider/client/TestDiagnostics.groovy
@@ -42,7 +42,7 @@ class TestDiagnostics extends YarnZKMiniClusterTestBase {
         //config includes RM binding info
         new YarnConfiguration(miniCluster.config),
         //varargs list of command line params
-        [SliderActions.ACTION_DIAGNOSTIC,
+        [SliderActions.ACTION_DIAGNOSTICS,
          Arguments.ARG_CLIENT]
     )
     def client = launcher.service

Reply via email to