This is an automated email from the ASF dual-hosted git repository.
aradzinski pushed a commit to branch NLPCRAFT-108
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git
The following commit(s) were added to refs/heads/NLPCRAFT-108 by this push:
new 111528c WIP.
111528c is described below
commit 111528cff427c59d4eb41ee82e348ae63cbdc8a1
Author: Aaron Radzinski <[email protected]>
AuthorDate: Tue Sep 29 00:15:53 2020 -0700
WIP.
---
bin/nlpcraft.cmd | 2 +
bin/nlpcraft.sh | 26 +++++----
.../model/tools/cmdline/NCCommandLine.scala | 65 +++++++++++++++++++++-
3 files changed, 78 insertions(+), 15 deletions(-)
diff --git a/bin/nlpcraft.cmd b/bin/nlpcraft.cmd
index 132ad06..dfb0da4 100644
--- a/bin/nlpcraft.cmd
+++ b/bin/nlpcraft.cmd
@@ -104,6 +104,8 @@ set JVM_OPTS= ^
-XX:+UseG1GC ^
-XX:MaxMetaspaceSize=256m ^
-DNLPCRAFT_CLI= ^
+ -DNLPCRAFT_CLI_CP="%CP%" ^
+ -DNLPCRAFT_CLI_JAVA="%JAVA_HOME%\bin\java.exe" ^
-DNLPCRAFT_CLI_SCRIPT="%SCRIPT_NAME%" ^
-DNLPCRAFT_CLI_INSTALL_HOME="%INSTALL_HOME%"
diff --git a/bin/nlpcraft.sh b/bin/nlpcraft.sh
index 4cd8ab6..31356ca 100644
--- a/bin/nlpcraft.sh
+++ b/bin/nlpcraft.sh
@@ -92,18 +92,6 @@ checkJava() {
fi
}
-MAIN_CLASS=org.apache.nlpcraft.model.tools.cmdline.NCCommandLine
-JVM_OPTS="\
- -ea \
- -Xms1g \
- -Xmx1g \
- -server \
- -XX:+UseG1GC \
- -XX:MaxMetaspaceSize=256m \
- -DNLPCRAFT_CLI= \
- -DNLPCRAFT_CLI_SCRIPT=$SCRIPT_NAME \
- -DNLPCRAFT_CLI_INSTALL_HOME=$INSTALL_HOME"
-
osname=$(uname)
# OS specific classpath separator.
@@ -136,6 +124,20 @@ done
# Check Java version.
checkJava
+MAIN_CLASS=org.apache.nlpcraft.model.tools.cmdline.NCCommandLine
+JVM_OPTS="\
+ -ea \
+ -Xms1g \
+ -Xmx1g \
+ -server \
+ -XX:+UseG1GC \
+ -XX:MaxMetaspaceSize=256m \
+ -DNLPCRAFT_CLI= \
+ -DNLPCRAFT_CLI_CP=$CP \
+ -DNLPCRAFT_CLI_JAVA=$JAVA \
+ -DNLPCRAFT_CLI_SCRIPT=$SCRIPT_NAME \
+ -DNLPCRAFT_CLI_INSTALL_HOME=$INSTALL_HOME"
+
case $osname in
Darwin*)
# shellcheck disable=SC2086
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCommandLine.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCommandLine.scala
index be5964a..5679a48 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCommandLine.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCommandLine.scala
@@ -34,6 +34,10 @@ import org.apache.nlpcraft.common._
import org.apache.nlpcraft.common.ansi.{NCAnsi, NCAnsiSpinner}
import org.apache.nlpcraft.common.ansi.NCAnsi._
import org.apache.nlpcraft.common.version.NCVersion
+import java.lang.ProcessBuilder
+import java.lang.ProcessBuilder.Redirect
+import java.lang.management.ManagementFactory
+
import resource.managed
import scala.collection.mutable
@@ -51,9 +55,18 @@ object NCCommandLine extends App {
private final val SRV_PID_PATH = ".nlpcraft/server_pid"
private final lazy val VER = NCVersion.getCurrent
+ private final lazy val JAVA = U.sysEnv("NLPCRAFT_CLI_JAVA").getOrElse(
+ new File(
+ SystemUtils.getJavaHome,
+ s"bin/java${if (SystemUtils.IS_OS_UNIX) "" else ".exe"}"
+ ).getAbsolutePath
+ )
private final lazy val INSTALL_HOME =
U.sysEnv("NLPCRAFT_CLI_INSTALL_HOME").getOrElse(
SystemUtils.USER_DIR
)
+ private final lazy val JAVA_CP =
U.sysEnv("NLPCRAFT_CLI_JAVA_CP").getOrElse(
+ ManagementFactory.getRuntimeMXBean.getClassPath
+ )
private final lazy val SCRIPT_NAME =
U.sysEnv("NLPCRAFT_CLI_SCRIPT").getOrElse(
s"nlpcraft.${if (SystemUtils.IS_OS_UNIX) "sh" else "cmd"}"
)
@@ -158,13 +171,13 @@ object NCCommandLine extends App {
"provide an alternative path."
),
Parameter(
- id = "outputPath",
+ id = "output",
names = Seq("--output-path", "-o"),
value = Some("path"),
optional = true,
desc =
"File path for both REST server stdout and stderr
output. If not provided, the REST server" +
- s"output will be piped into
'$${USER_HOME}/.nlpcraft/server-output.txt' file."
+ s"output will be piped into
'$${USER_HOME}/.nlpcraft/server-output-xxx.txt' file."
)
),
examples = Seq(
@@ -321,7 +334,53 @@ object NCCommandLine extends App {
* @param args Arguments, if any, for this command.
*/
private def cmdStartServer(cmd: Command, args: Seq[Argument]): Unit = {
- // TODO
+ val cfgPath = args.find(_.parameter.id == "config")
+ val igniteCfgPath = args.find(_.parameter.id == "igniteConfig")
+ val output = args.find(_.parameter.id == "output") match {
+ case Some(arg) ⇒ new File(arg.value.get)
+ case None ⇒ new File(SystemUtils.getUserHome,
s".nlpcraft/server-output-${currentTime}.txt")
+ }
+
+ val pb = new ProcessBuilder(
+ JAVA,
+ "-ea",
+ "-Xms2048m",
+ "-XX:+UseG1GC",
+ "--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED",
+ "--add-exports=java.base/sun.nio.ch=ALL-UNNAMED",
+
"--add-exports=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED",
+
"--add-exports=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED",
+
"--add-exports=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED",
+
"--add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED",
+ "--illegal-access=permit",
+ "-DNLPCRAFT_ANSI_COLOR_DISABLED=true",
+ "-cp",
+ s""""${JAVA_CP}"""",
+ "org.apache.nlpcraft.NCStart",
+ "-server",
+ cfgPath match {
+ case Some(path) ⇒ s"-config=$path"
+ case None ⇒ ""
+ },
+ igniteCfgPath match {
+ case Some(path) ⇒ s"-igniteConfig=$path"
+ case None ⇒ ""
+ },
+ )
+
+ pb.directory(new File(INSTALL_HOME))
+ pb.redirectErrorStream(true)
+ pb.redirectOutput(Redirect.appendTo(output))
+
+ try {
+ pb.start()
+
+ `>`(s"REST server started, output redirected to
${ansiCyan(output.getAbsolutePath)}")
+ `>`(s"Use ${ansiGreen("stop-server")} command to stop it.")
+ }
+ catch {
+ case e: Exception ⇒ error(s"REST server failed to start:
${ansiYellow(e.getLocalizedMessage)}")
+ }
}
/**