This is an automated email from the ASF dual-hosted git repository.
aradzinski pushed a commit to branch NLPCRAFT-301
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git
The following commit(s) were added to refs/heads/NLPCRAFT-301 by this push:
new c183fbf WIP.
c183fbf is described below
commit c183fbff891258857788e5d695b5706fcee84afb
Author: Aaron Radzinzski <[email protected]>
AuthorDate: Sat Apr 24 09:49:42 2021 +0300
WIP.
---
.../nlpcraft/model/tools/cmdline/NCCli.scala | 195 +++------------------
.../nlpcraft/model/tools/cmdline/NCCliBase.scala | 173 ++++++++++++++++++
.../org/apache/nlpcraft/probe/NCProbeBoot.scala | 4 +
3 files changed, 202 insertions(+), 170 deletions(-)
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala
index c0615d4..da4f8fb 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala
@@ -19,11 +19,9 @@ package org.apache.nlpcraft.model.tools.cmdline
import java.io._
import java.lang.ProcessBuilder.Redirect
-import java.lang.management.ManagementFactory
import java.nio.charset.StandardCharsets
-import java.nio.file.Paths
import java.text.DateFormat
-import java.{lang, util}
+import java.util
import java.util.Date
import java.util.regex.Pattern
import java.util.zip.ZipInputStream
@@ -47,8 +45,6 @@ import org.apache.nlpcraft.common.ansi.NCAnsi._
import org.apache.nlpcraft.common.ansi.{NCAnsi, NCAnsiProgressBar,
NCAnsiSpinner}
import org.apache.nlpcraft.common.ascii.NCAsciiTable
import org.apache.nlpcraft.common.module.NCModule
-import org.apache.nlpcraft.common.version.NCVersion
-import org.apache.nlpcraft.model.tools.sqlgen.impl.NCSqlModelGeneratorImpl
import org.jline.reader._
import org.jline.reader.impl.DefaultParser
import org.jline.reader.impl.DefaultParser.Bracket
@@ -60,7 +56,6 @@ import org.apache.nlpcraft.model.tools.cmdline.NCCliRestSpec._
import org.apache.nlpcraft.model.tools.cmdline.NCCliCommands._
import resource.managed
-import scala.annotation.tailrec
import scala.collection.JavaConverters._
import scala.collection.mutable
import scala.compat.Platform.currentTime
@@ -72,155 +67,13 @@ import scala.util.control.Exception.ignoring
/**
* NLPCraft CLI.
*/
-object NCCli extends App {
- private final val NAME = "NLPCraft CLI"
-
- /*
- * Disable warnings from Ignite on JDK 11.
- */
- final val JVM_OPTS_RT_WARNS = Seq (
- "--add-opens=java.base/jdk.internal.misc=ALL-UNNAMED",
- "--add-opens=java.base/sun.nio.ch=ALL-UNNAMED",
- "--add-opens=java.base/java.nio=ALL-UNNAMED",
- "--add-opens=java.base/java.io=ALL-UNNAMED",
- "--add-opens=java.base/java.util=ALL-UNNAMED",
- "--add-opens=java.base/java.lang=ALL-UNNAMED",
- "--add-opens=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED",
- "--add-opens=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED",
-
"--add-opens=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED",
- "--add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED",
- "--illegal-access=permit"
- )
+object NCCli extends NCCliBase {
+ var exitStatus = 0
- //noinspection RegExpRedundantEscape
- private final val TAILER_PTRN = Pattern.compile("^.*NC[a-zA-Z0-9]+ started
\\[[\\d]+ms\\]$")
- private final val CMD_NAME = Pattern.compile("(^\\s*[\\w-]+)(\\s)")
- private final val CMD_PARAM = Pattern.compile("(\\s)(--?[\\w-]+)")
-
- // Number of server and probe services that need to be started + 1
progress start.
- // Used for progress bar functionality.
- // +==================================================================+
- // | MAKE SURE TO UPDATE THIS VAR WHEN NUMBER OF SERVICES IS CHANGED. |
- // +==================================================================+
- private final val NUM_SRV_SERVICES = 31 /*services*/ + 1 /*progress start*/
- private final val NUM_PRB_SERVICES = 23 /*services*/ + 1 /*progress start*/
-
- private final val SRV_BEACON_PATH = ".nlpcraft/server_beacon"
- private final val PRB_BEACON_PATH = ".nlpcraft/probe_beacon"
- private final val HIST_PATH = ".nlpcraft/.cli_history"
-
- private final val DFLT_USER_EMAIL = "[email protected]"
- private final val DFLT_USER_PASSWD = "admin"
-
- private final val VER = NCVersion.getCurrent
- private final val CP_WIN_NIX_SEPS_REGEX = "[:;]"
- private final val CP_SEP = File.pathSeparator
- private final 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 val USR_WORK_DIR = SystemUtils.USER_DIR
- private final val USR_HOME_DIR = SystemUtils.USER_HOME
- private final val INSTALL_HOME =
U.sysEnv("NLPCRAFT_CLI_INSTALL_HOME").getOrElse(USR_WORK_DIR)
- private final val JAVA_CP =
U.sysEnv("NLPCRAFT_CLI_CP").getOrElse(ManagementFactory.getRuntimeMXBean.getClassPath)
- private final val SCRIPT_NAME =
U.sysEnv("NLPCRAFT_CLI_SCRIPT").getOrElse(s"nlpcraft.${if
(SystemUtils.IS_OS_UNIX) "sh" else "cmd"}")
- private final val PROMPT = if (SCRIPT_NAME.endsWith("cmd")) ">" else "$"
- private final val IS_SCRIPT = U.sysEnv("NLPCRAFT_CLI").isDefined
- private final val T___ = " "
- private final val OPEN_BRK = Seq('[', '{', '(')
- private final val CLOSE_BRK = Seq(']', '}', ')')
- private final val BRK_PAIR = OPEN_BRK.zip(CLOSE_BRK).toMap ++
CLOSE_BRK.zip(OPEN_BRK).toMap // Pair for each open or close bracket.
-
- private var exitStatus = 0
-
- private var term: Terminal = _
+ var term: Terminal = _
NCModule.setModule(NCModule.CLI)
- // See NCProbeMdo.
- case class Probe(
- probeToken: String,
- probeId: String,
- probeGuid: String,
- probeApiVersion: String,
- probeApiDate: String,
- osVersion: String,
- osName: String,
- osArch: String,
- startTstamp: Long,
- tmzId: String,
- tmzAbbr: String,
- tmzName: String,
- userName: String,
- javaVersion: String,
- javaVendor: String,
- hostName: String,
- hostAddr: String,
- macAddr: String,
- models: Array[ProbeModel]
- )
-
- // See NCProbeModelMdo.
- case class ProbeModel(
- id: String,
- name: String,
- version: String,
- enabledBuiltInTokens: Array[String]
- )
-
- case class ProbeAllResponse(
- probes: Array[Probe],
- status: String
- )
-
- case class SplitError(index: Int)
- extends Exception
-
- case class UnknownCommand(cmd: String)
- extends IllegalArgumentException(s"Unknown command ${c("'" + cmd +
"'")}, type ${c("'help'")} to get help.")
-
- case class NoLocalServer()
- extends IllegalStateException(s"Local server not found, use
$C'start-server'$RST command to start one.")
-
- case class NoLocalProbe()
- extends IllegalStateException(s"Local probe not found, use
$C'start-probe'$RST command to start one.")
-
- case class MissingParameter(cmd: Command, paramId: String)
- extends IllegalArgumentException(
- s"Missing mandatory parameter $C${"'" + cmd.params.find(_.id ==
paramId).get.names.head + "'"}$RST, " +
- s"type $C'help --cmd=${cmd.name}'$RST to get help."
- )
-
- case class NotSignedIn()
- extends IllegalStateException(s"Not signed in. Use ${c("'signin'")}
command to sign in first.")
-
- case class MissingMandatoryJsonParameters(cmd: Command, missingParams:
Seq[RestSpecParameter], path: String)
- extends IllegalArgumentException(
- s"Missing mandatory JSON parameters (${missingParams.map(s ⇒
y(s.name)).mkString(",")}) " +
- s"for $C${"'" + cmd.name + s" --path=$path'"}$RST, type $C'help
--cmd=${cmd.name}'$RST to get help."
- )
-
- case class InvalidParameter(cmd: Command, paramId: String)
- extends IllegalArgumentException(
- s"Invalid parameter $C${"'" + cmd.params.find(_.id ==
paramId).get.names.head + "'"}$RST, " +
- s"type $C'help --cmd=${cmd.name}'$RST to get help."
- )
-
- case class InvalidJsonParameter(cmd: Command, param: String)
- extends IllegalArgumentException(
- s"Invalid JSON parameter $C${"'" + param + "'"}$RST, " +
- s"type $C'help --cmd=${cmd.name}'$RST to get help."
- )
-
- case class HttpError(httpCode: Int)
- extends IllegalStateException(s"REST error (HTTP ${c(httpCode)}).")
-
- case class MalformedJson()
- extends IllegalStateException(s"Malformed JSON. ${c("Tip:")} on
Windows make sure to escape double quotes.")
-
- case class TooManyArguments(cmd: Command)
- extends IllegalArgumentException(s"Too many arguments, type $C'help
--cmd=${cmd.name}'$RST to get help.")
-
- case class NotEnoughArguments(cmd: Command)
- extends IllegalArgumentException(s"Not enough arguments, type $C'help
--cmd=${cmd.name}'$RST to get help.")
-
// Project templates for 'gen-project' command.
private lazy val PRJ_TEMPLATES: Map[String, Seq[String]] = {
val m = mutable.HashMap.empty[String, Seq[String]]
@@ -355,7 +208,7 @@ object NCCli extends App {
* @param id
*/
private def isParam(cmd: Command, args: Seq[Argument], id: String):
Boolean =
- args.find(_.parameter.id == id).nonEmpty
+ args.exists(_.parameter.id == id)
/**
* @param cmd
@@ -377,7 +230,7 @@ object NCCli extends App {
*/
private def getFlagParam(cmd: Command, args: Seq[Argument], id: String,
dflt: Boolean): Boolean =
args.find(_.parameter.id == id) match {
- case Some(b) ⇒ true
+ case Some(_) ⇒ true
case None ⇒ dflt
}
@@ -511,7 +364,7 @@ object NCCli extends App {
private [cmdline] def cmdStartServer(cmd: Command, args: Seq[Argument],
repl: Boolean): Unit = {
val cfgPath = getPathParam(cmd, args, "config")
val igniteCfgPath = getPathParam(cmd, args, "igniteConfig")
- val noWait = getFlagParam(cmd, args, "noWait", false)
+ val noWait = getFlagParam(cmd, args, "noWait", dflt = false)
val timeoutMins = getIntParam(cmd, args, "timeoutMins", 2)
val jvmOpts = getParamOpt(cmd, args, "jvmopts") match {
case Some(opts) ⇒ U.splitTrimFilter(U.trimQuotes(opts), " ")
@@ -535,7 +388,7 @@ object NCCli extends App {
// Store in REPL state right away.
state.serverLog = Some(output)
- var srvArgs = mutable.ArrayBuffer.empty[String]
+ val srvArgs = mutable.ArrayBuffer.empty[String]
srvArgs += JAVA
srvArgs ++= jvmOpts
@@ -716,7 +569,7 @@ object NCCli extends App {
if (mdls == null && addCp != null)
warn(s"Additional classpath (${c("--cp")}) but no models
(${c("--models")}).")
- var jvmArgs = mutable.ArrayBuffer.empty[String]
+ val jvmArgs = mutable.ArrayBuffer.empty[String]
jvmArgs += JAVA
jvmArgs ++= jvmOpts
@@ -776,7 +629,7 @@ object NCCli extends App {
}
val cfgPath = getPathParam(cmd, args, "config")
- val noWait = getFlagParam(cmd, args, "noWait", false)
+ val noWait = getFlagParam(cmd, args, "noWait", dflt = false)
val addCp = getCpParam(cmd, args, "cp")
val timeoutMins = getIntParam(cmd, args, "timeoutMins", 1)
val mdls = getParamOrNull(cmd, args, "models")
@@ -788,12 +641,12 @@ object NCCli extends App {
if (mdls != null) {
if (hasExternalModels(mdls) && addCp == null)
throw new IllegalStateException(
- s"Additional classpath is required when deploying your own
models. " +
+ s"Additional classpath is required when deploying user
models. " +
s"Use ${c("--cp")} parameters to provide additional
classpath.")
}
if (mdls == null && addCp != null)
- warn(s"Additional classpath (${c("--cp")}) but no models
(${c("--models")}).")
+ warn(s"Additional classpath (${c("--cp")}) specified but no models
(${c("--models")}).")
val logTstamp = currentTime
@@ -803,7 +656,7 @@ object NCCli extends App {
// Store in REPL state right away.
state.probeLog = Some(output)
- var prbArgs = mutable.ArrayBuffer.empty[String]
+ val prbArgs = mutable.ArrayBuffer.empty[String]
prbArgs += JAVA
prbArgs ++= jvmOpts
@@ -1115,7 +968,7 @@ object NCCli extends App {
name.startsWith(s".pid_$ph")
})
- if (files.size == 1) {
+ if (files != null && files.size == 1) {
val split = files(0).getName.split("_")
if (split.size == 4) {
@@ -1221,7 +1074,7 @@ object NCCli extends App {
name.startsWith(s".pid_$ph")
})
- if (files.size == 1) {
+ if (files != null && files.size == 1) {
val split = files(0).getName.split("_")
if (split.size == 4) {
@@ -1386,7 +1239,7 @@ object NCCli extends App {
* @return
*/
def mkCmdLines(cmd: Command): Seq[String] = {
- var lines = mutable.Buffer.empty[String]
+ val lines = mutable.Buffer.empty[String]
if (cmd.desc.isDefined)
lines += cmd.synopsis + " " + cmd.desc.get
@@ -1407,7 +1260,7 @@ object NCCli extends App {
lines += c(line)
if (param.optional)
- lines += s"$T___${T___}${g("Optional.")}"
+ lines += s"$T___$T___${g("Optional.")}"
lines += s"$T___$T___${param.desc}"
lines += ""
@@ -1519,7 +1372,7 @@ object NCCli extends App {
* @return
*/
private def logProbeInfo(beacon: NCCliProbeBeacon): Unit = {
- var tbl = new NCAsciiTable
+ val tbl = new NCAsciiTable
val logPath = if (beacon.logPath != null) g(beacon.logPath) else
y("<not available>")
val jarsFolder = if (beacon.jarsFolder != null) g(beacon.jarsFolder)
else y("<not set>")
@@ -1547,6 +1400,8 @@ object NCCli extends App {
val logPath = if (beacon.logPath != null) g(beacon.logPath) else
y("<not available>")
+ val epUrl = "http://" + beacon.restEndpoint
+
tbl += ("PID", s"${g(beacon.pid)}")
tbl += ("Database:", "")
tbl += (" URL", s"${g(beacon.dbUrl)}")
@@ -1557,7 +1412,7 @@ object NCCli extends App {
tbl += (" Pool increment", s"${g(beacon.dbPoolInc)}")
tbl += (" Reset on start", s"${g(beacon.dbInit)}")
tbl += ("REST:", "")
- tbl += (" Endpoint", s"${g("http://" + beacon.restEndpoint)}")
+ tbl += (" Endpoint", s"${g(epUrl)}")
tbl += (" API provider", s"${g(beacon.restApi)}")
tbl += ("Probe:", "")
tbl += (" Uplink", s"${g(beacon.upLink)}")
@@ -1575,7 +1430,7 @@ object NCCli extends App {
logln(s"Local server:\n${tbl.toString}")
- tbl = new NCAsciiTable
+ tbl = new NCAsciiTable()
def addProbeToTable(tbl: NCAsciiTable, probe: Probe): NCAsciiTable = {
tbl += (
@@ -1756,7 +1611,7 @@ object NCCli extends App {
case None ⇒ Seq("-ea", "-Xms1024m")
}
- var jvmArgs = mutable.ArrayBuffer.empty[String]
+ val jvmArgs = mutable.ArrayBuffer.empty[String]
jvmArgs += JAVA
jvmArgs ++= jvmOpts
@@ -1781,7 +1636,7 @@ object NCCli extends App {
arg.value match {
case None ⇒ jvmArgs += p
- case Some(v) ⇒ jvmArgs += s"$p=${arg.value.get}"
+ case Some(_) ⇒ jvmArgs += s"$p=${arg.value.get}"
}
}
@@ -1838,7 +1693,7 @@ object NCCli extends App {
val mdlId = getParam(cmd, args, "mdlId")
val txt = getParam(cmd, args, "txt")
val data = getParamOrNull(cmd, args, "data")
- val enableLog = getFlagParam(cmd, args, "enableLog", false)
+ val enableLog = getFlagParam(cmd, args, "enableLog", dflt =
false)
httpRest(
cmd,
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCliBase.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCliBase.scala
new file mode 100644
index 0000000..39323ad
--- /dev/null
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCliBase.scala
@@ -0,0 +1,173 @@
+/*
+ * 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.nlpcraft.model.tools.cmdline
+
+import org.apache.commons.lang3.SystemUtils
+import org.apache.nlpcraft.common.version.NCVersion
+import org.apache.nlpcraft.common._
+
+import java.io.File
+import java.lang.management.ManagementFactory
+import java.util.regex.Pattern
+
+/**
+ *
+ */
+class NCCliBase extends App {
+ final val NAME = "NLPCraft CLI"
+
+ /*
+ * Disable warnings from Ignite on JDK 11.
+ */
+ final val JVM_OPTS_RT_WARNS = Seq (
+ "--add-opens=java.base/jdk.internal.misc=ALL-UNNAMED",
+ "--add-opens=java.base/sun.nio.ch=ALL-UNNAMED",
+ "--add-opens=java.base/java.nio=ALL-UNNAMED",
+ "--add-opens=java.base/java.io=ALL-UNNAMED",
+ "--add-opens=java.base/java.util=ALL-UNNAMED",
+ "--add-opens=java.base/java.lang=ALL-UNNAMED",
+ "--add-opens=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED",
+ "--add-opens=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED",
+
"--add-opens=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED",
+ "--add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED",
+ "--illegal-access=permit"
+ )
+
+ //noinspection RegExpRedundantEscape
+ final val TAILER_PTRN = Pattern.compile("^.*NC[a-zA-Z0-9]+ started
\\[[\\d]+ms\\]$")
+ final val CMD_NAME = Pattern.compile("(^\\s*[\\w-]+)(\\s)")
+ final val CMD_PARAM = Pattern.compile("(\\s)(--?[\\w-]+)")
+
+ // Number of server and probe services that need to be started + 1
progress start.
+ // Used for progress bar functionality.
+ // +==================================================================+
+ // | MAKE SURE TO UPDATE THIS VAR WHEN NUMBER OF SERVICES IS CHANGED. |
+ // +==================================================================+
+ final val NUM_SRV_SERVICES = 31 /*services*/ + 1 /*progress start*/
+ final val NUM_PRB_SERVICES = 23 /*services*/ + 1 /*progress start*/
+
+ final val SRV_BEACON_PATH = ".nlpcraft/server_beacon"
+ final val PRB_BEACON_PATH = ".nlpcraft/probe_beacon"
+ final val HIST_PATH = ".nlpcraft/.cli_history"
+
+ final val DFLT_USER_EMAIL = "[email protected]"
+ final val DFLT_USER_PASSWD = "admin"
+
+ final val VER = NCVersion.getCurrent
+ final val CP_WIN_NIX_SEPS_REGEX = "[:;]"
+ final val CP_SEP = File.pathSeparator
+ final val JAVA = U.sysEnv("NLPCRAFT_CLI_JAVA").getOrElse(new
File(SystemUtils.getJavaHome, s"bin/java${if (SystemUtils.IS_OS_UNIX) "" else
".exe"}").getAbsolutePath)
+ final val USR_WORK_DIR = SystemUtils.USER_DIR
+ final val USR_HOME_DIR = SystemUtils.USER_HOME
+ final val INSTALL_HOME =
U.sysEnv("NLPCRAFT_CLI_INSTALL_HOME").getOrElse(USR_WORK_DIR)
+ final val JAVA_CP =
U.sysEnv("NLPCRAFT_CLI_CP").getOrElse(ManagementFactory.getRuntimeMXBean.getClassPath)
+ final val SCRIPT_NAME =
U.sysEnv("NLPCRAFT_CLI_SCRIPT").getOrElse(s"nlpcraft.${if
(SystemUtils.IS_OS_UNIX) "sh" else "cmd"}")
+ final val PROMPT = if (SCRIPT_NAME.endsWith("cmd")) ">" else "$"
+ final val IS_SCRIPT = U.sysEnv("NLPCRAFT_CLI").isDefined
+ final val T___ = " "
+ final val OPEN_BRK = Seq('[', '{', '(')
+ final val CLOSE_BRK = Seq(']', '}', ')')
+ final val BRK_PAIR = OPEN_BRK.zip(CLOSE_BRK).toMap ++
CLOSE_BRK.zip(OPEN_BRK).toMap // Pair for each open or close bracket.
+
+ // See NCProbeMdo.
+ case class Probe(
+ probeToken: String,
+ probeId: String,
+ probeGuid: String,
+ probeApiVersion: String,
+ probeApiDate: String,
+ osVersion: String,
+ osName: String,
+ osArch: String,
+ startTstamp: Long,
+ tmzId: String,
+ tmzAbbr: String,
+ tmzName: String,
+ userName: String,
+ javaVersion: String,
+ javaVendor: String,
+ hostName: String,
+ hostAddr: String,
+ macAddr: String,
+ models: Array[ProbeModel]
+ )
+
+ // See NCProbeModelMdo.
+ case class ProbeModel(
+ id: String,
+ name: String,
+ version: String,
+ enabledBuiltInTokens: Array[String]
+ )
+
+ case class ProbeAllResponse(
+ probes: Array[Probe],
+ status: String
+ )
+
+ case class SplitError(index: Int)
+ extends Exception
+
+ case class UnknownCommand(cmd: String)
+ extends IllegalArgumentException(s"Unknown command ${c("'" + cmd +
"'")}, type ${c("'help'")} to get help.")
+
+ case class NoLocalServer()
+ extends IllegalStateException(s"Local server not found, use
$C'start-server'$RST command to start one.")
+
+ case class NoLocalProbe()
+ extends IllegalStateException(s"Local probe not found, use
$C'start-probe'$RST command to start one.")
+
+ case class MissingParameter(cmd: Command, paramId: String)
+ extends IllegalArgumentException(
+ s"Missing mandatory parameter $C${"'" + cmd.params.find(_.id ==
paramId).get.names.head + "'"}$RST, " +
+ s"type $C'help --cmd=${cmd.name}'$RST to get help."
+ )
+
+ case class NotSignedIn()
+ extends IllegalStateException(s"Not signed in. Use ${c("'signin'")}
command to sign in first.")
+
+ case class MissingMandatoryJsonParameters(cmd: Command, missingParams:
Seq[RestSpecParameter], path: String)
+ extends IllegalArgumentException(
+ s"Missing mandatory JSON parameters (${missingParams.map(s ⇒
y(s.name)).mkString(",")}) " +
+ s"for $C${"'" + cmd.name + s" --path=$path'"}$RST, type
$C'help --cmd=${cmd.name}'$RST to get help."
+ )
+
+ case class InvalidParameter(cmd: Command, paramId: String)
+ extends IllegalArgumentException(
+ s"Invalid parameter $C${"'" + cmd.params.find(_.id ==
paramId).get.names.head + "'"}$RST, " +
+ s"type $C'help --cmd=${cmd.name}'$RST to get help."
+ )
+
+ case class InvalidJsonParameter(cmd: Command, param: String)
+ extends IllegalArgumentException(
+ s"Invalid JSON parameter $C${"'" + param + "'"}$RST, " +
+ s"type $C'help --cmd=${cmd.name}'$RST to get help."
+ )
+
+ case class HttpError(httpCode: Int)
+ extends IllegalStateException(s"REST error (HTTP ${c(httpCode)}).")
+
+ case class MalformedJson()
+ extends IllegalStateException(s"Malformed JSON. ${c("Tip:")} on
Windows make sure to escape double quotes.")
+
+ case class TooManyArguments(cmd: Command)
+ extends IllegalArgumentException(s"Too many arguments, type $C'help
--cmd=${cmd.name}'$RST to get help.")
+
+ case class NotEnoughArguments(cmd: Command)
+ extends IllegalArgumentException(s"Not enough arguments, type $C'help
--cmd=${cmd.name}'$RST to get help.")
+}
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/NCProbeBoot.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/NCProbeBoot.scala
index da13b07..90a2fd6 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/NCProbeBoot.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/NCProbeBoot.scala
@@ -83,6 +83,10 @@ private [probe] object NCProbeBoot extends LazyLogging with
NCOpenCensusTrace {
var models: String,
var lifecycle: Seq[String]
) {
+ require(id != null)
+ require(token != null)
+ require(models != null)
+
lazy val upLinkString = s"${upLink._1}:${upLink._2}"
lazy val downLinkString = s"${downLink._1}:${downLink._2}"
lazy val modelsSeq: Seq[String] = U.splitTrimFilter(models,",")