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 53cd823 WIP.
53cd823 is described below
commit 53cd8230553b32ef5a3a230ad23ecb050a76ab76
Author: Aaron Radzinski <[email protected]>
AuthorDate: Wed Sep 30 15:44:55 2020 -0700
WIP.
---
.../main/scala/org/apache/nlpcraft/NCStart.scala | 2 +-
.../org/apache/nlpcraft/common/NCService.scala | 2 +-
.../org/apache/nlpcraft/common/ansi/NCAnsi.scala | 16 +++---
.../nlpcraft/common/ascii/NCAsciiTable.scala | 14 +++---
.../nlpcraft/common/config/NCConfigurable.scala | 2 +-
.../nlpcraft/common/makro/NCMacroParser.scala | 24 ++++-----
.../scala/org/apache/nlpcraft/common/package.scala | 35 ++++++-------
.../org/apache/nlpcraft/common/util/NCUtils.scala | 8 +--
.../apache/nlpcraft/model/NCModelFileAdapter.java | 6 +--
.../apache/nlpcraft/model/impl/NCTokenLogger.scala | 8 +--
.../model/intent/impl/NCIntentDslCompiler.scala | 9 ++--
.../model/intent/impl/NCIntentSolver.scala | 7 ++-
.../model/intent/impl/NCIntentSolverEngine.scala | 6 +--
.../model/intent/utils/NCDslTokenPredicate.java | 18 +++----
.../cmdline/{NCCommandLine.scala => NCCli.scala} | 40 +++++++--------
.../model/tools/cmdline/NCCliServerBeacon.scala | 34 +++++++++++++
.../sqlgen/impl/NCSqlModelGeneratorImpl.scala | 2 +-
.../tools/sqlgen/impl/NCSqlSchemaBuilderImpl.scala | 4 +-
.../test/impl/NCTestAutoModelValidatorImpl.scala | 4 +-
.../nlpcraft/probe/mgrs/model/NCModelManager.scala | 10 ++--
.../probe/mgrs/nlp/NCProbeEnrichmentManager.scala | 26 +++++-----
.../org/apache/nlpcraft/server/NCServer.scala | 58 ++++++++++++++++------
.../server/geo/tools/NCGeoNamesGenerator.scala | 2 +-
.../org/apache/nlpcraft/server/json/NCJson.scala | 4 +-
.../nlpcraft/server/mdo/impl/NCAnnotatedMdo.scala | 12 ++---
.../nlp/enrichers/NCServerEnrichmentManager.scala | 2 +-
.../nlpcraft/server/probe/NCProbeManager.scala | 8 +--
.../nlpcraft/server/query/NCQueryManager.scala | 14 +++---
.../nlpcraft/server/rest/NCRestManager.scala | 5 +-
.../org/apache/nlpcraft/server/sql/NCSql.scala | 16 +++++-
.../nlpcraft/server/user/NCUserManager.scala | 6 ++-
31 files changed, 237 insertions(+), 167 deletions(-)
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCStart.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCStart.scala
index bc289a5..80b854f 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCStart.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCStart.scala
@@ -63,7 +63,7 @@ object NCStart extends App with LazyLogging {
for (msg ← msgs)
logger.error(msg)
- logger.info(ansiGreen("Usage:"))
+ logger.info(g("Usage:"))
logger.info(" Use '-server' argument to start server.")
logger.info(" Use '-probe' argument to start probe.")
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/NCService.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/NCService.scala
index 66422a6..7a592ce 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/NCService.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/NCService.scala
@@ -121,7 +121,7 @@ abstract class NCService extends LazyLogging with
NCOpenCensusTrace {
"state" → "started"
)
- val dur = s"$ansiBlueFg[${currentTime - timeStampMs}ms]$ansiReset"
+ val dur = s"$ansiGreenFg[${currentTime - timeStampMs}ms]$ansiReset"
logger.info(s"$name started $dur")
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/ansi/NCAnsi.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/ansi/NCAnsi.scala
index 82a29c7..f65e333 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/ansi/NCAnsi.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/ansi/NCAnsi.scala
@@ -96,14 +96,14 @@ sealed trait NCAnsi extends LazyLogging {
def ansiBlink: String = if (isEnabled) BLINK else ""
def ansiInvisible: String = if (isEnabled) INVISIBLE else ""
- def ansiGreen(s: String): String = s"$ansiGreenFg$s$ansiReset"
- def ansiRed(s: String): String = s"$ansiRedFg$s$ansiReset"
- def ansiCyan(s: String): String = s"$ansiCyanFg$s$ansiReset"
- def ansiYellow(s: String): String = s"$ansiYellowFg$s$ansiReset"
- def ansiBlack(s: String): String = s"$ansiBlackFg$s$ansiReset"
- def ansiWhite(s: String): String = s"$ansiWhiteFg$s$ansiReset"
- def ansiBlue(s: String): String = s"$ansiBlueFg$s$ansiReset"
- def ansiBold(s: String): String = s"$ansiBold$s$ansiReset"
+ def ansiGreen(s: Any): String = s"$ansiGreenFg${s.toString}$ansiReset"
+ def ansiRed(s: Any): String = s"$ansiRedFg${s.toString}$ansiReset"
+ def ansiCyan(s: Any): String = s"$ansiCyanFg${s.toString}s$ansiReset"
+ def ansiYellow(s: Any): String = s"$ansiYellowFg${s.toString}$ansiReset"
+ def ansiBlack(s: Any): String = s"$ansiBlackFg${s.toString}s$ansiReset"
+ def ansiWhite(s: Any): String = s"$ansiWhiteFg${s.toString}$ansiReset"
+ def ansiBlue(s: Any): String = s"$ansiBlueFg${s.toString}$ansiReset"
+ def ansiBold(s: Any): String = s"$ansiBold${s.toString}$ansiReset"
// Erase functions.
def ansiClearScreen: String = if (isEnabled) CLEAR_SCREEN else ""
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/ascii/NCAsciiTable.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/ascii/NCAsciiTable.scala
index cc7e5af..62a96bd 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/ascii/NCAsciiTable.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/ascii/NCAsciiTable.scala
@@ -112,12 +112,12 @@ class NCAsciiTable {
)
// Table drawing symbols.
- private val HDR_HOR = ansiCyan("=")
- private val HDR_VER = ansiCyan("|")
- private val HDR_CRS = ansiBlue("+")
- private val ROW_HOR = ansiCyan("-")
- private val ROW_VER = ansiCyan("|")
- private val ROW_CRS = ansiBlue("+")
+ private val HDR_HOR = c("=")
+ private val HDR_VER = c("|")
+ private val HDR_CRS = c("+")
+ private val ROW_HOR = c("-")
+ private val ROW_VER = c("|")
+ private val ROW_CRS = c("+")
// Headers & rows.
private var hdr = IndexedSeq.empty[Cell]
@@ -455,7 +455,7 @@ class NCAsciiTable {
case "center" ⇒ space(d / 2) + txt + space(d / 2 + d % 2)
case "left" ⇒ space(sty.leftPad) + txt + space(d - sty.leftPad)
case "right" ⇒ space(d - sty.rightPad) + txt + space(sty.rightPad)
- case _ ⇒ throw new AssertionError(s"Invalid align option in: $sty")
+ case _ ⇒ throw new AssertionError(s"Invalid align option: $sty")
}
}
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/config/NCConfigurable.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/config/NCConfigurable.scala
index 1cb4d7a..222286d 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/config/NCConfigurable.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/config/NCConfigurable.scala
@@ -324,7 +324,7 @@ object NCConfigurable extends LazyLogging {
logger.error(s"Invalid configuration.")
logger.error(s"Note that you can use environment variable to
provide configuration properties - see
https://nlpcraft.apache.org/server-and-probe.html.")
- throw new NCE(s"No valid configuration found in:
${tmpCfg.origin().description()}")
+ throw new NCE(s"No valid configuration found:
${tmpCfg.origin().description()}")
}
else {
if (overrideCfg.isDefined)
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/NCMacroParser.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/NCMacroParser.scala
index da46a8a..951dddd 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/NCMacroParser.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/NCMacroParser.scala
@@ -112,7 +112,7 @@ class NCMacroParser {
val last = s.length() - 1
if (s.head != '{' || s.charAt(last) != '}')
- throw new NCE(s"Invalid option group in: $txt")
+ throw new NCE(s"Invalid option group: $txt")
s = s.substring(1, last) // Trim out opening '{' and closing '}'.
@@ -151,9 +151,9 @@ class NCMacroParser {
}
if (depth != 0)
- throw new NCE(s"Uneven curly brackets in: $txt")
+ throw new NCE(s"Uneven curly brackets: $txt")
if (isEscape)
- throw new NCE(s"Incomplete '\\' escape usage in: $txt")
+ throw new NCE(s"Incomplete '\\' escape usage: $txt")
if (!found)
Some(Token(s.substring(0), ""))
@@ -189,7 +189,7 @@ class NCMacroParser {
def procMarker(fix: String): Option[Token] = {
if (s.startsWith(fix))
s.substring(fix.length).indexOf(fix) match {
- case -1 ⇒ throw new NCE(s"Uneven '$fix' marker in: $s")
+ case -1 ⇒ throw new NCE(s"Uneven '$fix' marker: $s")
case i ⇒
val tail = i + 2 * fix.length
@@ -222,7 +222,7 @@ class NCMacroParser {
val i = s.substring(DSL_FIX.length).indexOf(DSL_FIX)
if (i == -1)
- throw new NCE(s"Uneven '$DSL_FIX' marker in: $s")
+ throw new NCE(s"Uneven '$DSL_FIX' marker: $s")
val tail = i + 2 * DSL_FIX.length
@@ -252,9 +252,9 @@ class NCMacroParser {
}
if (depth != 0 || !found)
- throw new NCE(s"Uneven curly brackets in: $s")
+ throw new NCE(s"Uneven curly brackets: $s")
if (isEscape)
- throw new NCE(s"Incomplete '\\' escape usage in: $s")
+ throw new NCE(s"Incomplete '\\' escape usage: $s")
Some(Token(s.substring(0, i), s.substring(i)))
}
@@ -269,7 +269,7 @@ class NCMacroParser {
else {
if (!isEscape)
ch match {
- case '|' | '*' | '}' ⇒ throw new
NCE(s"Suspicious '$ch' at pos $i in: '$s'")
+ case '|' | '*' | '}' ⇒ throw new
NCE(s"Suspicious '$ch' at pos $i: '$s'")
case '{' ⇒ found = true // Found start of
the option group.
case _ ⇒
}
@@ -281,7 +281,7 @@ class NCMacroParser {
}
if (isEscape)
- throw new NCE(s"Incomplete '\\' escape usage in: $s")
+ throw new NCE(s"Incomplete '\\' escape usage: $s")
if (!found)
Some(Token(s.substring(0), ""))
@@ -398,7 +398,7 @@ class NCMacroParser {
// Check for potentially invalid macros syntax.
if (BROKEN_MACRO_REGEX1.findFirstIn(s).isDefined ||
BROKEN_MACRO_REGEX2.findFirstIn(s).isDefined)
- throw new NCE(s"Likely invalid macro in: $txt")
+ throw new NCE(s"Likely invalid macro: $txt")
U.distinct(expand0(s).toList map trimDupSpaces map processEscapes)
}
@@ -410,9 +410,9 @@ class NCMacroParser {
*/
private def checkName(name: String): Unit = {
if (name.head != '<')
- throw new NCE(s"Missing macro '<' opening in: $name")
+ throw new NCE(s"Missing macro '<' opening: $name")
if (name.reverse.head != '>')
- throw new NCE(s"Missing macro '>' closing in: $name")
+ throw new NCE(s"Missing macro '>' closing: $name")
}
/**
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/package.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/package.scala
index b79d64a..ccedb9e 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/package.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/package.scala
@@ -19,7 +19,7 @@ package org.apache.nlpcraft
import java.util.concurrent.Callable
import java.util.function.{BiPredicate, Consumer, Supplier, Function ⇒
JFunction, Predicate ⇒ JPredicate}
-
+import org.apache.nlpcraft.common.ansi.NCAnsi._
import org.apache.nlpcraft.common.util._
import scala.language.implicitConversions
@@ -40,6 +40,15 @@ package object common {
final val MDL_META_ALL_GRP_IDS_KEY = "__NLPCRAFT_MDL_META_ALL_GRP_IDS"
final val MDL_META_ALL_ALIASES_KEY = "__NLPCRAFT_MDL_META_ALL_ALIASES"
final val TOK_META_ALIASES_KEY = "__NLPCRAFT_TOK_META_ALIASES"
+
+ // Real foreground color shortcuts...
+ def g(s: Any): String = s"$ansiGreenFg${s.toString}$ansiReset"
+ def r(s: Any): String = s"$ansiRedFg${s.toString}$ansiReset"
+ def c(s: Any): String = s"$ansiCyanFg${s.toString}$ansiReset"
+ def y(s: Any): String = s"$ansiYellowFg${s.toString}$ansiReset"
+ def w(s: Any): String = s"$ansiWhiteFg${s.toString}$ansiReset"
+ def b(s: Any): String = s"$ansiBlueFg${s.toString}$ansiReset"
+ def k(s: Any): String = s"$ansiBlackFg${s.toString}$ansiReset"
/**
*
@@ -47,9 +56,7 @@ package object common {
* @tparam T
* @return
*/
- implicit def toJavaConsumer[T](f: T ⇒ Unit): Consumer[T] = new Consumer[T]
{
- override def accept(t: T): Unit = f(t)
- }
+ implicit def toJavaConsumer[T](f: T ⇒ Unit): Consumer[T] = (t: T) => f(t)
/**
*
@@ -57,9 +64,7 @@ package object common {
* @tparam A
* @return
*/
- implicit def toJavaSupplier[A](f: () ⇒ A): Supplier[A] = new Supplier[A] {
- override def get(): A = f()
- }
+ implicit def toJavaSupplier[A](f: () ⇒ A): Supplier[A] = () => f()
/**
*
@@ -68,9 +73,7 @@ package object common {
* @tparam B
* @return
*/
- implicit def toJavaFunction[A, B](f: A ⇒ B): JFunction[A, B] = new
JFunction[A, B] {
- override def apply(a: A): B = f(a)
- }
+ implicit def toJavaFunction[A, B](f: A ⇒ B): JFunction[A, B] = (a: A) =>
f(a)
/**
*
@@ -78,9 +81,7 @@ package object common {
* @tparam A
* @return
*/
- implicit def toJavaPredicate[A](f: A ⇒ Boolean): JPredicate[A] = new
JPredicate[A] {
- override def test(a: A): Boolean = f(a)
- }
+ implicit def toJavaPredicate[A](f: A ⇒ Boolean): JPredicate[A] = (a: A) =>
f(a)
/**
*
@@ -89,9 +90,7 @@ package object common {
* @tparam B
* @return
*/
- implicit def toJavaBiPredicate[A, B](predicate: (A, B) ⇒ Boolean):
BiPredicate[A, B] = new BiPredicate[A, B] {
- override def test(a: A, b: B): Boolean = predicate(a, b)
- }
+ implicit def toJavaBiPredicate[A, B](predicate: (A, B) ⇒ Boolean):
BiPredicate[A, B] = (a: A, b: B) => predicate(a, b)
/**
* @param f Lambda to convert.
@@ -107,7 +106,5 @@ package object common {
* @return Callable object.
*/
implicit def toCallable[R](f: () ⇒ R): Callable[R] =
- new Callable[R] {
- override def call(): R = f()
- }
+ () => f()
}
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala
index b91f728..c7a50e8 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala
@@ -1490,12 +1490,12 @@ object NCUtils extends LazyLogging {
for (ch ← json) {
ch match {
- case ':' if !inQuotes ⇒ buf ++= ansiRed(":")
- case '[' | ']' | '{' | '}' if !inQuotes ⇒ buf ++=
ansiYellow(s"$ch")
- case ',' if !inQuotes ⇒ buf ++= ansiGreen(s"$ch")
+ case ':' if !inQuotes ⇒ buf ++= r(":")
+ case '[' | ']' | '{' | '}' if !inQuotes ⇒ buf ++= y(s"$ch")
+ case ',' if !inQuotes ⇒ buf ++= g(s"$ch")
case '"' ⇒
if (inQuotes)
- buf ++= ansiBlue(s"$ch")
+ buf ++= b(s"$ch")
else
buf ++= s"$ansiBlueFg$ch$ansiCyanFg"
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCModelFileAdapter.java
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCModelFileAdapter.java
index aa25fe1..54fab0f 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCModelFileAdapter.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCModelFileAdapter.java
@@ -157,7 +157,7 @@ abstract public class NCModelFileAdapter extends
NCModelAdapter {
throw new NCException("Malformed model configuration URI: " +
uri.toString(), e);
}
catch (IOException e) {
- throw new NCException("Failed to read model configuration from: "
+ uri.toString(), e);
+ throw new NCException("Failed to read model configuration: " +
uri.toString(), e);
}
}
@@ -177,7 +177,7 @@ abstract public class NCModelFileAdapter extends
NCModelAdapter {
return mapper.readValue(in, NCModelJson.class);
}
catch (Exception e) {
- throw new NCException("Failed to load YAML from: " + path, e);
+ throw new NCException("Failed to load YAML: " + path, e);
}
}
else if (pathLow.endsWith("js") || pathLow.endsWith("json")) {
@@ -185,7 +185,7 @@ abstract public class NCModelFileAdapter extends
NCModelAdapter {
return GSON.fromJson(reader, NCModelJson.class);
}
catch (Exception e) {
- throw new NCException("Failed to load JSON from: " + path, e);
+ throw new NCException("Failed to load JSON: " + path, e);
}
}
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/NCTokenLogger.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/NCTokenLogger.scala
index b43cda0..5db7a11 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/NCTokenLogger.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/impl/NCTokenLogger.scala
@@ -429,9 +429,9 @@ object NCTokenLogger extends LazyLogging {
val origTxtStr =
if (tok.isStopWord)
- ansiRed(tok.origText)
+ r(tok.origText)
else if (tok.isFreeWord)
- ansiYellow(tok.origText)
+ y(tok.origText)
else
tok.origText
@@ -442,8 +442,8 @@ object NCTokenLogger extends LazyLogging {
tok.lemma,
tok.pos,
tok.isQuoted,
- if (tok.isStopWord) s"${ansiRedFg}true$ansiReset" else
"false",
- if (tok.isFreeWord) s"${ansiYellowFg}true$ansiReset" else
"false",
+ if (tok.isStopWord) s"${r("true")}" else "false",
+ if (tok.isFreeWord) s"${y("true")}" else "false",
s"[${tok.wordIndexes.mkString(",")}]",
tok.isDirect,
tok.sparsity
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentDslCompiler.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentDslCompiler.scala
index abbc3aa..fa56ba2 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentDslCompiler.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentDslCompiler.scala
@@ -20,11 +20,10 @@ package org.apache.nlpcraft.model.intent.impl
import com.typesafe.scalalogging.LazyLogging
import org.antlr.v4.runtime._
import org.antlr.v4.runtime.tree._
-import org.apache.nlpcraft.common.NCE
import org.apache.nlpcraft.model.NCToken
import org.apache.nlpcraft.model.intent.impl.antlr4.{NCIntentDslBaseListener,
NCIntentDslLexer, NCIntentDslParser}
import org.apache.nlpcraft.model.intent.utils.{NCDslFlowItem, NCDslIntent,
NCDslTerm, NCDslTokenPredicate}
-import org.apache.nlpcraft.common.ansi.NCAnsi._
+import org.apache.nlpcraft.common._
import scala.collection.JavaConverters._
import scala.collection.mutable
@@ -330,9 +329,9 @@ object NCIntentDslCompiler extends LazyLogging {
e: RecognitionException): Unit = {
val errMsg = s"Intent DSL syntax error at line $line:$charPos -
$msg\n" +
- s" |- ${ansiCyan("Model:")} $mdlId\n" +
- s" |- ${ansiCyan("Intent:")} $dsl\n" +
- s" +- ${ansiCyan("Error:")} ${makeCharPosPointer(dsl.length,
charPos)}"
+ s" |- ${c("Model:")} $mdlId\n" +
+ s" |- ${c("Intent:")} $dsl\n" +
+ s" +- ${c("Error:")} ${makeCharPosPointer(dsl.length,
charPos)}"
throw new NCE(errMsg)
}
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentSolver.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentSolver.scala
index ce6e1ca..dde3624 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentSolver.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentSolver.scala
@@ -19,7 +19,6 @@ package org.apache.nlpcraft.model.intent.impl
import com.typesafe.scalalogging.LazyLogging
import io.opencensus.trace.Span
-import org.apache.nlpcraft.common.NCException
import org.apache.nlpcraft.common.debug.NCLogHolder
import org.apache.nlpcraft.common.opencensus.NCOpenCensusTrace
import org.apache.nlpcraft.common.util.NCUtils
@@ -27,7 +26,7 @@ import org.apache.nlpcraft.model.impl.NCVariantImpl
import org.apache.nlpcraft.model.intent.utils.NCDslIntent
import org.apache.nlpcraft.model.{NCContext, NCIntentMatch, NCIntentSkip,
NCModel, NCRejection, NCResult, NCToken, NCVariant}
import org.apache.nlpcraft.probe.mgrs.dialogflow.NCDialogFlowManager
-import org.apache.nlpcraft.common.ansi.NCAnsi._
+import org.apache.nlpcraft.common._
import scala.collection.JavaConverters._
/**
@@ -151,7 +150,7 @@ class NCIntentSolver(intents: List[(NCDslIntent/*Intent*/,
NCIntentMatch ⇒ NCR
if (cbRes.getIntentId == null)
cbRes.setIntentId(res.intentId)
- logger.info(s"Intent '${res.intentId}' for variant
#${res.variantIdx + 1} selected as the ${ansiRed("<<best match>>")}")
+ logger.info(s"Intent '${res.intentId}' for variant
#${res.variantIdx + 1} selected as the ${r("<<best match>>")}")
NCDialogFlowManager.addMatchedIntent(res.intentId,
req.getUser.getId, ctx.getModel.getId, span)
@@ -164,7 +163,7 @@ class NCIntentSolver(intents: List[(NCDslIntent/*Intent*/,
NCIntentMatch ⇒ NCR
case e: NCIntentSkip ⇒
// No-op - just skipping this result.
e.getMessage match {
- case s if s != null ⇒ logger.info(s"Selected intent
'${res.intentId}' skipped due to: $s")
+ case s if s != null ⇒ logger.info(s"Selected intent
'${res.intentId}' skipped: $s")
case _ ⇒ logger.info(s"Selected intent
'${res.intentId}' skipped.")
}
}
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentSolverEngine.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentSolverEngine.scala
index e82fc67..5168d12 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentSolverEngine.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentSolverEngine.scala
@@ -249,11 +249,11 @@ object NCIntentSolverEngine extends LazyLogging with
NCOpenCensusTrace {
tbl += (
Seq(
s"#${m.variantIdx + 1}",
- ansiRed("<<best match")
+ r("<<best match")
),
Seq(
im.intent.id,
- ansiRed("<<best match")
+ r("<<best match")
),
mkPickTokens(im)
)
@@ -276,7 +276,7 @@ object NCIntentSolverEngine extends LazyLogging with
NCOpenCensusTrace {
)
})
- tbl.info(logger, Some(s"Found matching intents (sorted
${ansiRed("best")} to worst):"))
+ tbl.info(logger, Some(s"Found matching intents (sorted
${r("best")} to worst):"))
}
else
logger.info("No matching intent found.")
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslTokenPredicate.java
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslTokenPredicate.java
index f1f0cdb..c717833 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslTokenPredicate.java
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslTokenPredicate.java
@@ -79,13 +79,13 @@ public class NCDslTokenPredicate implements
Function<NCToken, Boolean> {
// Assert?
if (param == null || (param.charAt(0) != '~' &&
!PARAMS.contains(param)))
throw new IllegalArgumentException(String.format(
- "Invalid token predicate DSL parameter ('%s') in: %s %s %s",
+ "Invalid token predicate DSL parameter ('%s'): %s %s %s",
param, param, op, value));
// Assert?
if (op == null || !OPS.contains(op))
throw new IllegalArgumentException(String.format(
- "Invalid token predicate DSL operation ('%s') in: %s %s %s",
+ "Invalid token predicate DSL operation ('%s'): %s %s %s",
op, param, op, value));
this.parts = new ArrayList<>(parts);
@@ -370,7 +370,7 @@ public class NCDslTokenPredicate implements
Function<NCToken, Boolean> {
String str = param.substring(1);
if (str.isEmpty())
- throw new IllegalArgumentException(String.format("Token
predicate DSL empty meta parameter name in: %s %s %s",
+ throw new IllegalArgumentException(String.format("Token
predicate DSL empty meta parameter name: %s %s %s",
param, op, valueStr));
String[] parts = str.split("[\\[\\]]");
@@ -387,7 +387,7 @@ public class NCDslTokenPredicate implements
Function<NCToken, Boolean> {
if (strIdx.isEmpty())
throw new IllegalArgumentException(
- String.format("Token predicate DSL meta parameter
empty index in: %s %s %s", param, op,
+ String.format("Token predicate DSL meta parameter
empty index: %s %s %s", param, op,
valueStr));
else if (obj instanceof java.util.List) {
try {
@@ -395,7 +395,7 @@ public class NCDslTokenPredicate implements
Function<NCToken, Boolean> {
}
catch (NumberFormatException e) {
throw new IllegalArgumentException(String.format(
- "Invalid token predicate DSL meta parameter
index ('%s') for java.util.List value (integer only) in: %s %s %s",
+ "Invalid token predicate DSL meta parameter
index ('%s') for java.util.List value (integer only): %s %s %s",
strIdx, param, op, valueStr),
e);
}
@@ -411,7 +411,7 @@ public class NCDslTokenPredicate implements
Function<NCToken, Boolean> {
}
else
throw new IllegalArgumentException(String.format(
- "Invalid token predicate DSL meta parameter in: %s %s %s",
param, op, valueStr));
+ "Invalid token predicate DSL meta parameter: %s %s %s",
param, op, valueStr));
}
else
switch (param) {
@@ -425,7 +425,7 @@ public class NCDslTokenPredicate implements
Function<NCToken, Boolean> {
case "parent": lval = tok.getParentId() == null ? null :
tok.getParentId().trim(); break;
default: throw new IllegalArgumentException(String.format(
- "Invalid token predicate DSL parameter ('%s') in: %s %s
%s",
+ "Invalid token predicate DSL parameter ('%s'): %s %s %s",
param, param, op, valueStr));
}
@@ -439,12 +439,12 @@ public class NCDslTokenPredicate implements
Function<NCToken, Boolean> {
param.equals("id") ||
param.equals("parent")) &&
!NCDslTokenChecker.isValidElementId(tok, (String)rval))
- throw new IllegalArgumentException(String.format("Attempt to
check unknown element ID '%s' in: %s %s %s",
+ throw new IllegalArgumentException(String.format("Attempt to
check unknown element ID '%s': %s %s %s",
rval, param, op, valueStr));
if ((param.equals("groups")) &&
!NCDslTokenChecker.isValidGroup(tok, (String)rval))
- throw new IllegalArgumentException(String.format("Attempt to
check unknown group ID '%s' in: %s %s %s",
+ throw new IllegalArgumentException(String.format("Attempt to
check unknown group ID '%s': %s %s %s",
rval, param, op, valueStr));
validated = true;
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/NCCli.scala
similarity index 95%
rename from
nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCommandLine.scala
rename to
nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala
index 35f91ae..0aa3a38 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/NCCli.scala
@@ -48,7 +48,7 @@ import scala.compat.Platform.currentTime
/**
* 'nlpcraft' script entry point.
*/
-object NCCommandLine extends App {
+object NCCli extends App {
private final val NAME = "Apache NLPCraft CLI"
private final val SRV_PID_PATH = ".nlpcraft/server_pid"
@@ -374,11 +374,11 @@ object NCCommandLine extends App {
try {
pb.start()
- `>`(s"REST server is starting, output redirected to
${ansiCyan(output.getAbsolutePath)}")
- `>`(s"Use ${ansiGreen("stop-server")} command to stop it.")
+ `>`(s"REST server is starting, output redirected to
${c(output.getAbsolutePath)}")
+ `>`(s"Use ${g("stop-server")} command to stop it.")
}
catch {
- case e: Exception ⇒ error(s"REST server failed to start:
${ansiYellow(e.getLocalizedMessage)}")
+ case e: Exception ⇒ error(s"REST server failed to start:
${y(e.getLocalizedMessage)}")
}
}
@@ -405,7 +405,7 @@ object NCCommandLine extends App {
var i = 0
while (i < num) {
- `>>`(s"Pinging REST server at ${ansiBlue(endpoint)} ")
+ `>>`(s"Pinging REST server at ${b(endpoint)} ")
val spinner = new NCAnsiSpinner(
System.out,
@@ -425,23 +425,23 @@ object NCCommandLine extends App {
case 200 ⇒
spinner.stop()
- log(ansiGreen("OK") + " " + ansiCyan(s"[${currentTime
- startMs}ms]"))
+ log(g("OK") + " " + c(s"[${currentTime - startMs}ms]"))
case code: Int ⇒
spinner.stop()
- log(ansiRed("FAIL") + s" [HTTP
$ansiYellowFg$code$ansiReset]")
+ log(r("FAIL") + s" [HTTP ${y(code.toString)}]")
}
catch {
case _: SSLException ⇒
spinner.stop()
- log(ansiRed("FAIL") + s" ${ansiYellow("[SSL error]")}")
+ log(r("FAIL") + s" ${y("[SSL error]")}")
case _: IOException ⇒
spinner.stop()
- log(ansiRed("FAIL") + s" ${ansiYellow("[I/O error]")}")
+ log(r("FAIL") + s" ${y("[I/O error]")}")
}
i += 1
@@ -472,9 +472,9 @@ object NCCommandLine extends App {
ProcessHandle.of(pid).asScala match {
case Some(ph) ⇒
if (ph.destroy())
- `>`(s"Local REST server (pid
${ansiCyan(pid.toString)}) has been stopped.")
+ `>`(s"Local REST server (pid ${c(pid.toString)}) has
been stopped.")
else
- error(s"Failed to stop the local REST server (pid
${ansiCyan(pid.toString)}).")
+ error(s"Failed to stop the local REST server (pid
${c(pid.toString)}).")
case None ⇒ error("Cannot find locally running REST server.")
@@ -533,7 +533,7 @@ object NCCommandLine extends App {
else
s"$T___${param.names.mkString(", ")}"
- lines += ansiCyan(line)
+ lines += c(line)
if (param.optional)
lines += s"$T___${T___}Optional."
@@ -550,7 +550,7 @@ object NCCommandLine extends App {
lines += ansiBold("EXAMPLES")
for (ex ← cmd.examples) {
- lines ++= ex.usage.map(s ⇒ ansiYellow(s"$T___$s"))
+ lines ++= ex.usage.map(s ⇒ y(s"$T___$s"))
lines += s"$T___$T___${ex.desc}"
}
}
@@ -631,8 +631,8 @@ object NCCommandLine extends App {
if (args.isEmpty)
log((
new NCAsciiTable
- += ("Version:", ansiCyan(VER.version))
- += ("Release date:", ansiCyan(VER.date.toString))
+ += ("Version:", c(VER.version))
+ += ("Release date:", c(VER.date.toString))
).toString
)
else {
@@ -660,7 +660,7 @@ object NCCommandLine extends App {
val msg2 = if (msg.head.isLower) msg.head.toUpper + msg.tail else msg
- System.err.println(s"${ansiRed("ERR:")} $msg2")
+ System.err.println(s"${r("ERR:")} $msg2")
}
/**
@@ -673,19 +673,19 @@ object NCCommandLine extends App {
*
* @param msg
*/
- private def `>`(msg: String): Unit =
System.out.println(s"${ansiGreen(">")} $msg")
+ private def `>`(msg: String): Unit = System.out.println(s"${g(">")} $msg")
/**
*
* @param msg
*/
- private def `>>`(msg: String): Unit = System.out.print(s"${ansiGreen(">")}
$msg")
+ private def `>>`(msg: String): Unit = System.out.print(s"${g(">")} $msg")
/**
*
*/
private def errorHelp(): Unit =
- error(s"Run '${ansiCyan(SCRIPT_NAME + " " + HELP_CMD.mainName)}' to
read the manual.")
+ error(s"Run '${c(SCRIPT_NAME + " " + HELP_CMD.mainName)}' to read the
manual.")
/**
* Prints out the version and copyright title header.
@@ -759,7 +759,7 @@ object NCCommandLine extends App {
args.map { arg ⇒
val parts = arg.split("=")
- def mkError() = new IllegalArgumentException(s"Invalid parameter:
${ansiCyan(arg)}")
+ def mkError() = new IllegalArgumentException(s"Invalid parameter:
${c(arg)}")
if (parts.size > 2)
throw mkError()
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCliServerBeacon.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCliServerBeacon.scala
new file mode 100644
index 0000000..ffe0e5c
--- /dev/null
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCliServerBeacon.scala
@@ -0,0 +1,34 @@
+/*
+ * 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
+
+/**
+ *
+ * @param pid
+ * @param restEndpoint
+ * @param upLink
+ * @param downLink
+ */
+case class NCCliServerBeacon(
+ pid: Long,
+ jdbcUrl: String,
+ restEndpoint: String,
+ upLink: String,
+ downLink: String
+)
+
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlModelGeneratorImpl.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlModelGeneratorImpl.scala
index 6300ecd..a7253ab 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlModelGeneratorImpl.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlModelGeneratorImpl.scala
@@ -741,7 +741,7 @@ object NCSqlModelGeneratorImpl {
v.toLowerCase match {
case "true" ⇒ true
case "false" ⇒ false
- case _ ⇒ throw new IllegalArgumentException(s"Invalid boolean
value in: $name $v")
+ case _ ⇒ throw new IllegalArgumentException(s"Invalid boolean
value: $name $v")
}
/**
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlSchemaBuilderImpl.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlSchemaBuilderImpl.scala
index 4a1793d..0b09fb1 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlSchemaBuilderImpl.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/sqlgen/impl/NCSqlSchemaBuilderImpl.scala
@@ -94,7 +94,7 @@ object NCSqlSchemaBuilderImpl {
extraTables = extra,
defaultDate = defDateOpt match {
case Some(defDate) ⇒
- def error() = throw new NCException(s"Invalid
default date declaration in: $defDate")
+ def error() = throw new NCException(s"Invalid
default date declaration: $defDate")
val pair = defDate.split("\\.")
@@ -111,7 +111,7 @@ object NCSqlSchemaBuilderImpl {
dfltSort.
foreach(s ⇒ {
- def error() = throw new NCException(s"Invalid
default sort declaration in: $s")
+ def error() = throw new NCException(s"Invalid
default sort declaration: $s")
var pair = s.split("\\.")
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/test/impl/NCTestAutoModelValidatorImpl.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/test/impl/NCTestAutoModelValidatorImpl.scala
index ad7f4f9..9f94fc0 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/test/impl/NCTestAutoModelValidatorImpl.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/test/impl/NCTestAutoModelValidatorImpl.scala
@@ -110,7 +110,7 @@ private [test] object NCTestAutoModelValidatorImpl extends
LazyLogging {
tbl += (
res.modelId,
res.intentId,
- if (res.pass) ansiGreen("OK") else ansiRed("FAIL"),
+ if (res.pass) g("OK") else r("FAIL"),
res.text,
res.error.getOrElse("")
)
@@ -119,7 +119,7 @@ private [test] object NCTestAutoModelValidatorImpl extends
LazyLogging {
val failCnt = results.count(!_.pass)
logger.info(s"Model auto-validation results: " +
- s"${ansiGreen("OK")} $passCnt, ${ansiRed("FAIL")}
$failCnt:\n${tbl.toString}"
+ s"${g("OK")} $passCnt, ${r("FAIL")} $failCnt:\n${tbl.toString}"
)
failCnt == 0
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/NCModelManager.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/NCModelManager.scala
index 4595941..eebe3d9 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/NCModelManager.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/NCModelManager.scala
@@ -68,16 +68,16 @@ object NCModelManager extends NCService with
DecorateAsScala {
Seq(
s"${mdl.getName}",
s"ID: ${ansiBold(mdl.getId)}, ver: ${mdl.getVersion}",
- s"Elements: $elmCnt" + (if (elmCnt == 0) s"
${ansiRed("(!)")}" else ""),
- s"Synonyms: $synCnt" + (if (synCnt == 0) s"
${ansiRed("(!)")}" else ""),
- s"Intents: $intentCnt" + (if (intentCnt == 0) s"
${ansiRed("(!)")}" else "")
+ s"Elements: $elmCnt" + (if (elmCnt == 0) s"
${r("(!)")}" else ""),
+ s"Synonyms: $synCnt" + (if (synCnt == 0) s"
${r("(!)")}" else ""),
+ s"Intents: $intentCnt" + (if (intentCnt == 0) s"
${r("(!)")}" else "")
),
w.intents
.map(_.toDslString)
.flatMap(s ⇒
s
- .replaceAll("intent=", s"${ansiGreen("intent")}=")
- .replaceAll(" term", s"\n
${ansiCyan("term")}").split("\n")
+ .replaceAll("intent=", s"${g("intent")}=")
+ .replaceAll(" term", s"\n
${c("term")}").split("\n")
)
)
})
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala
index 2c7eb92..54bc85a 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala
@@ -231,19 +231,19 @@ object NCProbeEnrichmentManager extends NCService with
NCOpenCensusModelStats {
val tbl = NCAsciiTable()
- tbl += (s"${ansiBlueFg}Text$ansiReset", nlpSens.map(s ⇒
ansiGreen(s.text)))
- tbl += (s"${ansiBlueFg}Model ID$ansiReset", mdlId)
- tbl += (s"${ansiBlueFg}User ID$ansiReset", usrId)
- tbl += (s"$ansiBlueFg First Name$ansiReset",
senMeta.getOrElse("FIRST_NAME", ""))
- tbl += (s"$ansiBlueFg Last Name$ansiReset",
senMeta.getOrElse("LAST_NAME", ""))
- tbl += (s"$ansiBlueFg Email$ansiReset", senMeta.getOrElse("EMAIL",
""))
- tbl += (s"$ansiBlueFg Company Name$ansiReset",
senMeta.getOrElse("COMPANY_NAME", ""))
- tbl += (s"$ansiBlueFg Is Admin$ansiReset",
senMeta.getOrElse("IS_ADMIN", ""))
- tbl += (s"$ansiBlueFg Signup Date$ansiReset", new
Date(java.lang.Long.parseLong(senMeta("SIGNUP_TSTAMP").toString)))
- tbl += (s"${ansiBlueFg}User Agent$ansiReset",
senMeta.getOrElse("USER_AGENT", ""))
- tbl += (s"${ansiBlueFg}Remote Address$ansiReset",
senMeta.getOrElse("REMOTE_ADDR", ""))
- tbl += (s"${ansiBlueFg}Server Timestamp$ansiReset", new
Date(java.lang.Long.parseLong(senMeta("RECEIVE_TSTAMP").toString)))
- tbl += (s"${ansiBlueFg}Server Request ID$ansiReset", srvReqId)
+ tbl += (s"${b("Text")}", nlpSens.map(s ⇒ g(s.text)))
+ tbl += (s"${b("Model ID$ansiReset")}", mdlId)
+ tbl += (s"${b("User ID$ansiReset")}", usrId)
+ tbl += (s"${b(" First Name$ansiReset")}",
senMeta.getOrElse("FIRST_NAME", ""))
+ tbl += (s"${b(" Last Name$ansiReset")}",
senMeta.getOrElse("LAST_NAME", ""))
+ tbl += (s"${b(" Email$ansiReset")}", senMeta.getOrElse("EMAIL", ""))
+ tbl += (s"${b(" Company Name$ansiReset")}",
senMeta.getOrElse("COMPANY_NAME", ""))
+ tbl += (s"${b(" Is Admin$ansiReset")}", senMeta.getOrElse("IS_ADMIN",
""))
+ tbl += (s"${b(" Signup Date$ansiReset")}", new
Date(java.lang.Long.parseLong(senMeta("SIGNUP_TSTAMP").toString)))
+ tbl += (s"${b("User Agent$ansiReset")}",
senMeta.getOrElse("USER_AGENT", ""))
+ tbl += (s"${b("Remote Address$ansiReset")}",
senMeta.getOrElse("REMOTE_ADDR", ""))
+ tbl += (s"${b("Server Timestamp$ansiReset")}", new
Date(java.lang.Long.parseLong(senMeta("RECEIVE_TSTAMP").toString)))
+ tbl += (s"${b("Server Request ID$ansiReset")}", srvReqId)
logger.info(s"New request received from server:\n$tbl")
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/NCServer.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/NCServer.scala
index f4f8ba5..290d653 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/NCServer.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/NCServer.scala
@@ -34,6 +34,7 @@ import org.apache.nlpcraft.common.nlp.dict.NCDictionaryManager
import org.apache.nlpcraft.common.nlp.numeric.NCNumericManager
import org.apache.nlpcraft.common.opencensus.NCOpenCensusTrace
import org.apache.nlpcraft.common.version._
+import org.apache.nlpcraft.model.tools.cmdline.NCCliServerBeacon
import org.apache.nlpcraft.server.company.NCCompanyManager
import org.apache.nlpcraft.server.feedback.NCFeedbackManager
import org.apache.nlpcraft.server.geo.NCGeoManager
@@ -62,7 +63,7 @@ import scala.util.control.Exception.{catching, ignoring}
* NLPCraft server app.
*/
object NCServer extends App with NCIgniteInstance with LazyLogging with
NCOpenCensusTrace {
- private final val PID_PATH = ".nlpcraft/server_pid"
+ private final val BEACON_PATH = ".nlpcraft/server_beacon"
private val startedMgrs = mutable.Buffer.empty[NCService]
@@ -194,8 +195,8 @@ object NCServer extends App with NCIgniteInstance with
LazyLogging with NCOpenCe
asciiLogo()
- storePid()
-
+ storeBeacon()
+
val lifecycle = new CountDownLatch(1)
catching(classOf[Throwable]) either startManagers() match {
@@ -228,40 +229,65 @@ object NCServer extends App with NCIgniteInstance with
LazyLogging with NCOpenCe
/**
*
*/
- private def storePid(): Unit = {
- val path = new File(SystemUtils.getUserHome, PID_PATH)
+ private def storeBeacon(): Unit = {
+ val path = new File(SystemUtils.getUserHome, BEACON_PATH)
/**
*
*/
- def storeInUserHome() =
+ def storeInUserHome() = {
+ final object Config extends NCConfigurable {
+ final private val pre = "nlpcraft.server"
+
+ lazy val restHost = getString(s"$pre.rest.host")
+ lazy val restPort = getInt(s"$pre.rest.port")
+ lazy val upLink = getString(s"$pre.probe.links.upLink")
+ lazy val downLink = getString(s"$pre.probe.links.downLink")
+ lazy val jdbcUrl = getString(s"$pre.database.jdbc.url")
+ }
+
try {
managed(new ObjectOutputStream(new FileOutputStream(path)))
acquireAndGet { stream ⇒
- stream.writeLong(ProcessHandle.current().pid())
+ stream.writeObject(NCCliServerBeacon(
+ pid = ProcessHandle.current().pid(),
+ jdbcUrl = Config.jdbcUrl,
+ restEndpoint =
s"${Config.restHost}:${Config.restPort}",
+ upLink = Config.upLink,
+ downLink = Config.downLink
+ ))
stream.flush()
}
+ // Make sure beacon is deleted when server process exits.
path.deleteOnExit()
- logger.trace(s"PID stored in: ${path.getAbsolutePath}")
+ logger.info(s"Server beacon saved: ${path.getAbsolutePath}")
}
catch {
- case e: IOException ⇒ U.prettyError(logger, "Failed to store
server PID.", e)
+ case e: IOException ⇒ U.prettyError(logger, "Failed to save
server beacon.", e)
}
+ }
if (path.exists())
catching(classOf[IOException]) either {
- managed(new ObjectInputStream(new FileInputStream(path)))
acquireAndGet { _.readLong() }
+ managed(new ObjectInputStream(new FileInputStream(path)))
acquireAndGet { _.readObject() }
} match {
- case Left(e) ⇒ U.prettyError(logger, s"Failed to read existing
PID from: ${path.getAbsolutePath}", e)
- case Right(pid) ⇒
- if (ProcessHandle.of(pid).isPresent)
- logger.error(s"Cannot store PID file as another local
server detected [existing-pid=$pid]")
- else
+ case Left(e) ⇒ U.prettyError(logger, s"Failed to read existing
server beacon: ${path.getAbsolutePath}", e)
+ case Right(rawObj) ⇒
+ val beacon = rawObj.asInstanceOf[NCCliServerBeacon]
+
+ if (ProcessHandle.of(beacon.pid).isPresent)
+ logger.error(s"Cannot save server beacon file as
another live local server detected [pid=${beacon.pid}]")
+ else {
+ logger.trace(s"Overriding server beacon for a phantom
process [pid=${beacon.pid}]")
+
storeInUserHome()
+ }
}
- else
+ else {
+ // No existing beacon file detected.
storeInUserHome()
+ }
}
NCIgniteRunner.runWith(
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/geo/tools/NCGeoNamesGenerator.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/geo/tools/NCGeoNamesGenerator.scala
index a6b5262..5f254c5 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/geo/tools/NCGeoNamesGenerator.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/geo/tools/NCGeoNamesGenerator.scala
@@ -533,7 +533,7 @@ object NCGeoNamesGenerator extends App {
usTop
)
- println(s"Files generated OK in: $outDir.")
+ println(s"Files generated OK: $outDir.")
}
// Input files.
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/json/NCJson.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/json/NCJson.scala
index 99c5fe6..a213564 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/json/NCJson.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/json/NCJson.scala
@@ -130,9 +130,9 @@ object NCJson {
private type NCJ = NCJsonException
// Specific control flow exceptions.
- case class InvalidJson(js: String) extends NCJ(s"Malformed JSON syntax in:
$js") with LazyLogging {
+ case class InvalidJson(js: String) extends NCJ(s"Malformed JSON syntax:
$js") with LazyLogging {
// Log right away.
- logger.error(s"Malformed JSON syntax in: $js")
+ logger.error(s"Malformed JSON syntax: $js")
}
case class InvalidJsonField(fn: String, cause: Throwable) extends
NCJ(s"Invalid '$fn' JSON field <" +
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/mdo/impl/NCAnnotatedMdo.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/mdo/impl/NCAnnotatedMdo.scala
index 6e28258..283a4ab 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/mdo/impl/NCAnnotatedMdo.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/mdo/impl/NCAnnotatedMdo.scala
@@ -36,9 +36,9 @@ import scala.util.control.Exception._
sealed case class NCMdoEntityAnnotationException(c: Class[_])
extends NCE(s"Annotated MDO doesn't have 'NCMdoEntity' annotation: $c")
sealed case class NCMdoFieldAnnotationException(c: Class[_])
- extends NCE(s"Not all main constructor parameters have 'NCMdoField'
annotation in: $c")
+ extends NCE(s"Not all main constructor parameters have 'NCMdoField'
annotation: $c")
sealed case class NCMdoSqlNotSupportedException(c: Class[_])
- extends NCE(s"SQL is not supported in: $c")
+ extends NCE(s"SQL is not supported: $c")
sealed case class NCMdoJsonConverterException(msg: String, c: Class[_],
mtdName: String)
extends NCE(s"$msg [name=$mtdName, class=$c]")
sealed case class NCMdoMissingGetterException(a: NCMdoField, c: Class[_])
@@ -148,21 +148,21 @@ object NCAnnotatedMdo {
val col = param.ann.column
if (col == "")
- throw NCMdoCheckException(s"SQL column is not
specified in: $param.ann")
+ throw NCMdoCheckException(s"SQL column is not
specified: $param.ann")
if (uniqCols.contains(col))
- throw NCMdoCheckException(s"Duplicate SQL column in:
$param.ann")
+ throw NCMdoCheckException(s"Duplicate SQL column:
$param.ann")
else
uniqCols = uniqCols :+ col
if (param.ann.pk() && pkFound)
- throw NCMdoCheckException(s"Duplicate SQL primary key
in: $param.ann")
+ throw NCMdoCheckException(s"Duplicate SQL primary key:
$param.ann")
else
pkFound = true
}
if (uniqJsons.contains(param.jsonName))
- throw NCMdoCheckException(s"Duplicate JSON name in:
$param.ann")
+ throw NCMdoCheckException(s"Duplicate JSON name:
$param.ann")
else
uniqJsons = uniqJsons :+ param.jsonName
}
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/NCServerEnrichmentManager.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/NCServerEnrichmentManager.scala
index 94e8468..86b7bee 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/NCServerEnrichmentManager.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/NCServerEnrichmentManager.scala
@@ -144,7 +144,7 @@ object NCServerEnrichmentManager extends NCService with
NCIgniteInstance {
val normTxt = NCPreProcessManager.normalize(txt, spellCheck =
true, span)
if (normTxt != txt)
- logger.info(s"Sentence normalized to: $normTxt")
+ logger.info(s"Sentence normalized: $normTxt")
val normEnabledBuiltInToks = enabledBuiltInToks.map(_.toLowerCase)
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/probe/NCProbeManager.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/probe/NCProbeManager.scala
index 0e007b2..aad300e 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/probe/NCProbeManager.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/probe/NCProbeManager.scala
@@ -360,7 +360,7 @@ object NCProbeManager extends NCService {
srv.bind(new InetSocketAddress(host, port))
- logger.info(s"$name server is listening on
'$host:$port'")
+ logger.info(s"$name connection is on '$host:$port'")
srv.setSoTimeout(Config.soTimeoutMs)
@@ -800,13 +800,13 @@ object NCProbeManager extends NCService {
tbl += (
Seq(
probe.probeId,
- s" ${ansiCyan("guid")}: ${probe.probeGuid}",
- s" ${ansiCyan("tok")}: ${probe.probeToken}"
+ s" ${c("guid")}: ${probe.probeGuid}",
+ s" ${c("tok")}: ${probe.probeToken}"
),
s"${probe.osName} ver. ${probe.osVersion}",
s"${probe.tmzAbbr}, ${probe.tmzId}",
s"${probe.hostName} (${probe.hostAddr})",
- probe.models.map(m ⇒ s"${ansiBlue(m.id)}, v${m.version}").toSeq
+ probe.models.map(m ⇒ s"${b(m.id)}, v${m.version}").toSeq
)
tbl
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/query/NCQueryManager.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/query/NCQueryManager.scala
index cbb2415..9b98da6 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/query/NCQueryManager.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/query/NCQueryManager.scala
@@ -264,12 +264,12 @@ object NCQueryManager extends NCService with
NCIgniteInstance with NCOpenCensusS
startScopedSpan("future", parent, "srvReqId" → srvReqId) { span ⇒
val tbl = NCAsciiTable()
- tbl += (s"${ansiBlueFg}Text$ansiReset", ansiGreen(txt0))
- tbl += (s"${ansiBlueFg}User ID$ansiReset", usr.id)
- tbl += (s"${ansiBlueFg}Model ID$ansiReset", mdlId)
- tbl += (s"${ansiBlueFg}Agent$ansiReset",
usrAgent.getOrElse("<n/a>"))
- tbl += (s"${ansiBlueFg}Remote Address$ansiReset",
rmtAddr.getOrElse("<n/a>"))
- tbl += (s"${ansiBlueFg}Server Request ID$ansiReset", srvReqId)
+ tbl += (s"${b("Text$ansiReset")}", g(txt0))
+ tbl += (s"${b("User ID$ansiReset")}", usr.id)
+ tbl += (s"${b("Model ID$ansiReset")}", mdlId)
+ tbl += (s"${b("Agent$ansiReset")}",
usrAgent.getOrElse("<n/a>"))
+ tbl += (s"${b("Remote Address$ansiReset")}",
rmtAddr.getOrElse("<n/a>"))
+ tbl += (s"${b("Server Request ID$ansiReset")}", srvReqId)
// TODO: need to pretty print data JSON
// tbl += (s"${ansiBlueFg}Data$ansiReset", data.getOrElse(""))
@@ -298,7 +298,7 @@ object NCQueryManager extends NCService with
NCIgniteInstance with NCOpenCensusS
case Success(_) ⇒ // No-op.
case Failure(e: NCE) ⇒
- logger.error(s"Query processing failed due to:
${e.getLocalizedMessage}")
+ logger.error(s"Query processing failed:
${e.getLocalizedMessage}")
setError(
srvReqId,
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCRestManager.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCRestManager.scala
index 7ad716b..91f2d9d 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCRestManager.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCRestManager.scala
@@ -24,6 +24,7 @@ import akka.stream.Materializer
import io.opencensus.trace.Span
import org.apache.nlpcraft.common.config.NCConfigurable
import org.apache.nlpcraft.common.{NCService, _}
+import org.apache.nlpcraft.common.ansi.NCAnsi._
import scala.concurrent.{ExecutionContextExecutor, Future}
import scala.util.{Failure, Success}
@@ -86,8 +87,8 @@ object NCRestManager extends NCService {
bindFut = Http().newServerAt(Config.host,
Config.port).bind(Route.toFunction(api.getRoute))
bindFut.onComplete {
- case Success(_) ⇒ logger.info(s"REST server is listening on
'$url'.")
- case Failure(_) ⇒ logger.info(s"REST server failed to start on
'$url'.")
+ case Success(_) ⇒ logger.info(s"REST server is on '${c(url)}'.")
+ case Failure(_) ⇒ logger.info(s"REST server failed to start on
'${c(url)}'.")
}
ackStarted()
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/sql/NCSql.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/sql/NCSql.scala
index a829002..520d820 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/sql/NCSql.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/sql/NCSql.scala
@@ -25,6 +25,7 @@ import com.typesafe.scalalogging.LazyLogging
import org.apache.ignite.{Ignite, IgniteAtomicSequence, IgniteJdbcThinDriver}
import org.apache.ignite.transactions.Transaction
import org.apache.nlpcraft.common._
+import org.apache.nlpcraft.common.ascii.NCAsciiTable
import org.apache.nlpcraft.common.config.NCConfigurable
import org.apache.nlpcraft.server.tx.NCTxManager
import resource._
@@ -110,8 +111,8 @@ object NCSql extends LazyLogging {
// c3p0 settings.
ds.setMaxStatements(Config.maxStmt)
ds.setMinPoolSize(Config.minPoolSize)
- ds.setAcquireIncrement(Config.acqInc)
ds.setMaxPoolSize(Config.maxPoolSize)
+ ds.setAcquireIncrement(Config.acqInc)
ds.setInitialPoolSize(Config.initPoolSize)
ds.setContextClassLoaderSource("library")
@@ -120,7 +121,18 @@ object NCSql extends LazyLogging {
ds
}
- logger.info(s"DB driver initialized: ${Config.driver}")
+ val tbl = new NCAsciiTable
+
+ tbl += ("JDBC URL", Config.url)
+ tbl += ("JDBC driver", Config.driver)
+ tbl += ("C3P0 pool", s"" +
+ s"min=${b(Config.minPoolSize)}, " +
+ s"ini=${b(Config.initPoolSize)}, " +
+ s"max=${b(Config.maxPoolSize)}, " +
+ s"inc=${b(Config.acqInc)}"
+ )
+
+ logger.info(s"Data source initialized:\n${tbl.toString}")
/**
* Wraps database error.
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/user/NCUserManager.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/user/NCUserManager.scala
index b0ea704..0d2fcf2 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/user/NCUserManager.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/user/NCUserManager.scala
@@ -30,6 +30,7 @@ import org.apache.nlpcraft.server.ignite.NCIgniteInstance
import org.apache.nlpcraft.server.mdo.{NCUserMdo, NCUserPropertyMdo}
import org.apache.nlpcraft.server.sql.{NCSql, NCSqlManager}
import org.apache.nlpcraft.server.tx.NCTxManager
+import org.apache.nlpcraft.common.ansi.NCAnsi._
import scala.collection.JavaConverters._
import scala.util.control.Exception._
@@ -180,8 +181,9 @@ object NCUserManager extends NCService with
NCIgniteInstance {
userLock = ignite.semaphore("userSemaphore", 1, true, true)
- logger.info(s"Access tokens will be scanned for timeout every
${Config.timeoutScannerFreqMins}m.")
- logger.info(s"Access tokens inactive for >=
${Config.accessTokenExpireTimeoutMins}m will be invalidated.")
+ logger.info(s"REST access tokens:")
+ logger.info(s" ${c("+-")} scanned for timeout every
${Config.timeoutScannerFreqMins}m.")
+ logger.info(s" ${c("+-")} invalidated if inactive for >=
${Config.accessTokenExpireTimeoutMins}m.")
ackStarted()
}