This is an automated email from the ASF dual-hosted git repository.

peacewong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/linkis.git

commit efc85b3801ff6b34d317873b420a7ff6ca9d8138
Author: peacewong <[email protected]>
AuthorDate: Wed Oct 4 23:37:18 2023 +0800

    add version info to linkis-cli
---
 .../linkis-client/linkis-cli/pom.xml               |  6 +++
 .../apache/linkis/cli/application/CtxBuilder.java  | 21 +++++++-
 .../cli/application/LinkisClientApplication.java   | 41 ++++++++++----
 .../linkis/cli/application/constants/CliKeys.java  |  2 +
 .../cli/application/constants/LinkisKeys.java      |  1 +
 .../command/template/UniversalCmdTemplate.java     | 12 +++++
 .../application/interactor/job/help/HelpJob.java   | 62 ++++++++++++++++++++++
 .../interactor/job/version/VersionJob.java         | 48 +++++++++++++++++
 .../job/version/VersionJobResult.java}             | 33 +++++++++++-
 .../application/operator/ujes/LinkisJobOper.java   |  4 +-
 .../src/main/resources/version.properties          | 16 ++++++
 11 files changed, 232 insertions(+), 14 deletions(-)

diff --git a/linkis-computation-governance/linkis-client/linkis-cli/pom.xml 
b/linkis-computation-governance/linkis-client/linkis-cli/pom.xml
index 9d0cbbb84..76723c4ad 100644
--- a/linkis-computation-governance/linkis-client/linkis-cli/pom.xml
+++ b/linkis-computation-governance/linkis-client/linkis-cli/pom.xml
@@ -62,6 +62,12 @@
 
   <build>
     <finalName>${project.artifactId}-${project.version}</finalName>
+    <resources>
+      <resource>
+        <filtering>true</filtering>
+        <directory>${basedir}/src/main/resources</directory>
+      </resource>
+    </resources>
     <plugins>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
diff --git 
a/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/CtxBuilder.java
 
b/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/CtxBuilder.java
index 592725f85..07df8b79a 100644
--- 
a/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/CtxBuilder.java
+++ 
b/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/CtxBuilder.java
@@ -46,9 +46,11 @@ import org.apache.linkis.cli.application.utils.LoggerManager;
 
 import org.apache.commons.lang3.StringUtils;
 
+import java.io.*;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -156,6 +158,23 @@ public class CtxBuilder {
             .init();
     logger.info("==========std_var============\n" + 
CliUtils.GSON.toJson(varAccess));
 
-    return new CliCtxImpl(params.getCmdType(), template, varAccess, new 
HashMap<>());
+    Properties props = new Properties();
+    try (InputStream inputStream =
+        
CtxBuilder.class.getClassLoader().getResourceAsStream("version.properties")) {
+      try (InputStreamReader reader = new InputStreamReader(inputStream)) {
+        try (BufferedReader bufferedReader = new BufferedReader(reader)) {
+          props.load(bufferedReader);
+        }
+      }
+    } catch (Exception e) {
+      logger.warn("Failed to load version info", e);
+    }
+
+    String verion = props.getProperty(CliKeys.VERSION);
+
+    Map<String, Object> extraMap = new HashMap<>();
+    extraMap.put(CliKeys.VERSION, verion);
+
+    return new CliCtxImpl(params.getCmdType(), template, varAccess, extraMap);
   }
 }
diff --git 
a/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/LinkisClientApplication.java
 
b/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/LinkisClientApplication.java
index f13c7399f..1fb21043a 100644
--- 
a/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/LinkisClientApplication.java
+++ 
b/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/LinkisClientApplication.java
@@ -26,9 +26,11 @@ import 
org.apache.linkis.cli.application.entity.job.JobResult;
 import org.apache.linkis.cli.application.exception.CommandException;
 import org.apache.linkis.cli.application.interactor.command.CmdTemplateFactory;
 import 
org.apache.linkis.cli.application.interactor.command.template.UniversalCmdTemplate;
+import org.apache.linkis.cli.application.interactor.job.help.HelpJob;
 import 
org.apache.linkis.cli.application.interactor.job.interactive.InteractiveJob;
 import org.apache.linkis.cli.application.interactor.job.jobcmd.JobCmdJob;
 import org.apache.linkis.cli.application.interactor.job.once.LinkisOnceJob;
+import org.apache.linkis.cli.application.interactor.job.version.VersionJob;
 import org.apache.linkis.cli.application.operator.OperManager;
 import org.apache.linkis.cli.application.operator.once.OnceOperBuilder;
 import org.apache.linkis.cli.application.operator.ujes.LinkisOperBuilder;
@@ -49,6 +51,8 @@ import org.slf4j.LoggerFactory;
 public class LinkisClientApplication {
   private static Logger logger = 
LoggerFactory.getLogger(LinkisClientApplication.class);
 
+  private static boolean showHelp = false;
+
   public static void main(String[] args) {
     /*
      generate template
@@ -64,7 +68,9 @@ public class LinkisClientApplication {
     } catch (CommandException e) {
       CmdTemplate template = CmdTemplateFactory.getTemplateOri(e.getCmdType());
       if (template != null) {
-        printHelp(template);
+        HelpInfoModel model = new HelpInfoModel();
+        model.buildModel(ctx.getTemplate());
+        new HelpPresenter().present(model);
       }
       LoggerManager.getInformationLogger().error("Failed to build CliCtx", e);
       System.exit(-1);
@@ -80,7 +86,11 @@ public class LinkisClientApplication {
     run job
      */
     Job job;
-    if (isJobCmd(ctx)) {
+    if (isVersionCmd(ctx)) {
+      job = new VersionJob();
+    } else if (isHelp(ctx)) {
+      job = new HelpJob();
+    } else if (isJobCmd(ctx)) {
       job = new JobCmdJob();
     } else if (isOnceCmd(ctx)) {
       job = new LinkisOnceJob();
@@ -134,21 +144,34 @@ public class LinkisClientApplication {
     }
   }
 
-  private static void printHelp(CmdTemplate template) {
-    HelpInfoModel model = new HelpInfoModel();
-    model.buildModel(template);
-    new HelpPresenter().present(model);
-  }
-
   private static void printIndicator(JobResult jobResult) {
     if (jobResult.isSuccess()) {
       LoggerManager.getPlaintTextLogger().info(CliConstants.SUCCESS_INDICATOR);
     } else {
+      LoggerManager.getPlaintTextLogger().info(jobResult.getMessage());
+      StringBuilder b = new StringBuilder();
+      for (Map.Entry<String, String> e : 
jobResult.getExtraMessage().entrySet()) {
+        
b.append(e.getKey()).append(":").append(e.getValue()).append(System.lineSeparator());
+      }
+      LoggerManager.getPlaintTextLogger().info(b.toString());
       LoggerManager.getPlaintTextLogger().info(CliConstants.FAILURE_INDICATOR);
-      LoggerManager.getPlaintTextLogger().error(jobResult.getMessage());
     }
   }
 
+  private static Boolean isHelp(CliCtx ctx) {
+    if (ctx.getVarAccess().hasVar(CliKeys.LINKIS_CLIENT_HELP_OPT)) {
+      return true;
+    }
+    return false;
+  }
+
+  private static Boolean isVersionCmd(CliCtx ctx) {
+    if (ctx.getVarAccess().hasVar(CliKeys.VERSION)) {
+      return true;
+    }
+    return false;
+  }
+
   private static Boolean isJobCmd(CliCtx ctx) {
     if (ctx.getVarAccess().hasVar(CliKeys.LINKIS_CLIENT_KILL_OPT)
         || ctx.getVarAccess().hasVar(CliKeys.LINKIS_CLIENT_STATUS_OPT)
diff --git 
a/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/constants/CliKeys.java
 
b/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/constants/CliKeys.java
index 5c04cbcd6..966836e0b 100644
--- 
a/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/constants/CliKeys.java
+++ 
b/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/constants/CliKeys.java
@@ -38,6 +38,8 @@ public class CliKeys {
   public static final String DEFAULT_CONFIG_FILE_NAME_KEY = "conf.file";
   public static final String LINUX_USER_KEY = "user.name";
 
+  public static final String VERSION = "cli.version";
+
   /** Configurable */
   /*
   execution type
diff --git 
a/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/constants/LinkisKeys.java
 
b/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/constants/LinkisKeys.java
index 848300313..170f1a8f8 100644
--- 
a/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/constants/LinkisKeys.java
+++ 
b/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/constants/LinkisKeys.java
@@ -47,4 +47,5 @@ public class LinkisKeys {
   public static final String KEY_YARN_QUEUE = "wds.linkis.rm.yarnqueue";
   public static final String KEY_HIVE_RESULT_DISPLAY_TBALE =
       "hive.resultset.use.unique.column.names";
+  public static final String CLI_VERSION = "cli.version";
 }
diff --git 
a/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/interactor/command/template/UniversalCmdTemplate.java
 
b/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/interactor/command/template/UniversalCmdTemplate.java
index f761a6a47..83b42032c 100644
--- 
a/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/interactor/command/template/UniversalCmdTemplate.java
+++ 
b/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/interactor/command/template/UniversalCmdTemplate.java
@@ -271,6 +271,15 @@ public class UniversalCmdTemplate extends 
AbstractCmdTemplate implements Cloneab
           "specify jobContent map. Input format: -jobContentMap key1=value1 
-jobContentMap key2=value2",
           true);
 
+  protected Flag versionFlag =
+      flag(
+          CliKeys.VERSION,
+          CliKeys.VERSION,
+          new String[] {"--version"},
+          "show version",
+          true,
+          false);
+
   protected Parameter<String[]> argumentsParas =
       parameter(
           CliKeys.LINKIS_CLIENT_COMMON,
@@ -286,6 +295,9 @@ public class UniversalCmdTemplate extends 
AbstractCmdTemplate implements Cloneab
 
   @Override
   public void checkParams() throws CommandException {
+    if (versionFlag.hasVal()) {
+      return;
+    }
     int cnt = 0;
     if (statusOpt.hasVal()) {
       cnt++;
diff --git 
a/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/interactor/job/help/HelpJob.java
 
b/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/interactor/job/help/HelpJob.java
new file mode 100644
index 000000000..943c54ed6
--- /dev/null
+++ 
b/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/interactor/job/help/HelpJob.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.linkis.cli.application.interactor.job.help;
+
+import org.apache.linkis.cli.application.entity.context.CliCtx;
+import org.apache.linkis.cli.application.entity.job.Job;
+import org.apache.linkis.cli.application.entity.job.JobResult;
+import org.apache.linkis.cli.application.present.HelpPresenter;
+import org.apache.linkis.cli.application.present.model.HelpInfoModel;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class HelpJob implements Job {
+  private CliCtx ctx;
+
+  @Override
+  public void build(CliCtx ctx) {
+    this.ctx = ctx;
+  }
+
+  @Override
+  public JobResult run() {
+    HelpInfoModel model = new HelpInfoModel();
+    model.buildModel(ctx.getTemplate());
+    new HelpPresenter().present(model);
+    return new JobResult() {
+      @Override
+      public Boolean isSuccess() {
+        return true;
+      }
+
+      @Override
+      public String getMessage() {
+        return "";
+      }
+
+      @Override
+      public Map<String, String> getExtraMessage() {
+        return new HashMap<>();
+      }
+    };
+  }
+
+  @Override
+  public void onDestroy() {}
+}
diff --git 
a/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/interactor/job/version/VersionJob.java
 
b/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/interactor/job/version/VersionJob.java
new file mode 100644
index 000000000..599f97904
--- /dev/null
+++ 
b/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/interactor/job/version/VersionJob.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.linkis.cli.application.interactor.job.version;
+
+import org.apache.linkis.cli.application.constants.CliKeys;
+import org.apache.linkis.cli.application.entity.context.CliCtx;
+import org.apache.linkis.cli.application.entity.job.Job;
+import org.apache.linkis.cli.application.entity.job.JobResult;
+import org.apache.linkis.cli.application.utils.LoggerManager;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class VersionJob implements Job {
+  private CliCtx ctx;
+
+  @Override
+  public void build(CliCtx cliCtx) {
+    this.ctx = cliCtx;
+  }
+
+  @Override
+  public JobResult run() {
+    String version = (String) ctx.getExtraMap().get(CliKeys.VERSION);
+    Map<String, String> extraMap = new HashMap<>();
+    extraMap.put(CliKeys.VERSION, version);
+    LoggerManager.getPlaintTextLogger().info("Version=" + version);
+    return new VersionJobResult(true, "ok", extraMap);
+  }
+
+  @Override
+  public void onDestroy() {}
+}
diff --git 
a/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/entity/version/Version.java
 
b/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/interactor/job/version/VersionJobResult.java
similarity index 53%
rename from 
linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/entity/version/Version.java
rename to 
linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/interactor/job/version/VersionJobResult.java
index b0bcd8b6d..e2f12cd7c 100644
--- 
a/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/entity/version/Version.java
+++ 
b/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/interactor/job/version/VersionJobResult.java
@@ -15,6 +15,35 @@
  * limitations under the License.
  */
 
-package org.apache.linkis.cli.application.entity.version;
+package org.apache.linkis.cli.application.interactor.job.version;
 
-public interface Version {}
+import org.apache.linkis.cli.application.entity.job.JobResult;
+
+import java.util.Map;
+
+public class VersionJobResult implements JobResult {
+  private Boolean success;
+  private String message;
+  private Map<String, String> extraMsg;
+
+  public VersionJobResult(Boolean success, String message, Map<String, String> 
extraMsg) {
+    this.success = success;
+    this.message = message;
+    this.extraMsg = extraMsg;
+  }
+
+  @Override
+  public Boolean isSuccess() {
+    return success;
+  }
+
+  @Override
+  public String getMessage() {
+    return message;
+  }
+
+  @Override
+  public Map<String, String> getExtraMessage() {
+    return extraMsg;
+  }
+}
diff --git 
a/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/operator/ujes/LinkisJobOper.java
 
b/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/operator/ujes/LinkisJobOper.java
index f696c8674..bfebf62c7 100644
--- 
a/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/operator/ujes/LinkisJobOper.java
+++ 
b/linkis-computation-governance/linkis-client/linkis-cli/src/main/java/org/apache/linkis/cli/application/operator/ujes/LinkisJobOper.java
@@ -269,7 +269,7 @@ public class LinkisJobOper implements JobOper {
           }
           String msg =
               MessageFormat.format(
-                  "Get job info failed. retry time : {0}/{1}. taskID={0}, 
Reason: {1}",
+                  "Get job info failed. retry time : {0}/{1}. taskID={2}, 
Reason: {3}",
                   retryTime, MAX_RETRY_TIME, taskID, reason);
 
           logger.debug(
@@ -299,7 +299,7 @@ public class LinkisJobOper implements JobOper {
       if (jobInfoResult == null) {
         reason = "JobInfoResult is null";
       } else {
-        reason = "server returns non-zero status-code";
+        reason = "server returns non-zero status-code. ";
         reason += jobInfoResult.getMessage();
       }
       String msg =
diff --git 
a/linkis-computation-governance/linkis-client/linkis-cli/src/main/resources/version.properties
 
b/linkis-computation-governance/linkis-client/linkis-cli/src/main/resources/version.properties
new file mode 100644
index 000000000..0da37e5c0
--- /dev/null
+++ 
b/linkis-computation-governance/linkis-client/linkis-cli/src/main/resources/version.properties
@@ -0,0 +1,16 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+#
+
+cli.version=${project.version}
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to