WIP on NLPCRAFT-369.
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 ddba511..1fb257c 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/NCService.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/NCService.scala
@@ -19,6 +19,7 @@
import com.typesafe.scalalogging.LazyLogging
import io.opencensus.trace.Span
+import org.apache.commons.lang3.StringUtils
import org.apache.nlpcraft.common.opencensus.NCOpenCensusTrace
import org.apache.nlpcraft.common.ansi.NCAnsi._
@@ -104,6 +105,14 @@
}
/**
+ *
+ * @param ms
+ * @return
+ */
+ private def padDur(ms: Long): String =
+ StringUtils.rightPad(s"${U.now() - ms}ms", 6)
+
+ /**
* Acks started service. Should be called at the end of the `start()` method.
*/
protected def ackStarted(): NCService = {
@@ -119,9 +128,9 @@
"state" -> "started"
)
- val dur = s"$ansiGreenFg[${U.now() - timeStampMs}ms]$ansiReset"
+ val durBrkt = s"$ansiReversed$ansiGreenFg$ansiBold[${padDur(timeStampMs)}]$ansiReset"
- logger.info(s"$name started $dur")
+ logger.info(s"$durBrkt $name started.")
timeStampMs = -1L
@@ -142,7 +151,9 @@
"state" -> "stopped"
)
- logger.info(s"$name stopped.")
+ val durBrkt = s"$ansiReversed$ansiBlueFg$ansiBold[${padDur(timeStampMs)}]$ansiReset"
+
+ logger.info(s"$durBrkt $name stopped.")
timeStampMs = -1L
}
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/solver/NCIntentSolverEngine.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/solver/NCIntentSolverEngine.scala
index dd59a88..86390ef 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/solver/NCIntentSolverEngine.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/solver/NCIntentSolverEngine.scala
@@ -192,11 +192,16 @@
val req = ctx.getRequest
+ val usrId = req.getUser.getId
+ val mdlId = ctx.getModel.getId
+
startScopedSpan("solve",
"srvReqId" -> req.getServerRequestId,
- "userId" -> req.getUser.getId,
- "mdlId" -> ctx.getModel.getId,
- "normText" -> req.getNormalizedText) { _ =>
+ "userId" -> usrId,
+ "mdlId" -> mdlId,
+ "normText" -> req.getNormalizedText) { span =>
+ NCDialogFlowManager.ack(usrId, mdlId, span)
+
val matches = mutable.ArrayBuffer.empty[MatchHolder]
// Find all matches across all intents and sentence variants.
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/dialogflow/NCDialogFlowManager.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/dialogflow/NCDialogFlowManager.scala
index 8c5f2c1..b7e667d 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/dialogflow/NCDialogFlowManager.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/dialogflow/NCDialogFlowManager.scala
@@ -18,13 +18,15 @@
package org.apache.nlpcraft.probe.mgrs.dialogflow
import io.opencensus.trace.Span
+import org.apache.nlpcraft.common.ascii.NCAsciiTable
import org.apache.nlpcraft.common.{NCService, _}
import org.apache.nlpcraft.model.intent.solver.NCIntentSolverResult
import org.apache.nlpcraft.model.{NCCompany, NCContext, NCDialogFlowItem, NCIntentMatch, NCResult, NCToken, NCUser, NCVariant}
import org.apache.nlpcraft.probe.mgrs.model.NCModelManager
+import java.text.DateFormat
import java.util
-import java.util.Optional
+import java.util.{Date, Optional}
import scala.collection._
/**
@@ -151,6 +153,7 @@
*
* @param usrId User ID.
* @param mdlId Model ID.
+ * @param parent Optional parent span.
* @return Dialog flow.
*/
def getDialogFlow(usrId: Long, mdlId: String, parent: Span = null): Seq[NCDialogFlowItem] =
@@ -161,6 +164,48 @@
}
/**
+ * Prints out ASCII table for current dialog flow.
+ *
+ * @param usrId User ID.
+ * @param mdlId Model ID.
+ * @param parent Optional parent span.
+ */
+ def ack(usrId: Long, mdlId: String, parent: Span = null): Unit = {
+ startScopedSpan("ack", parent, "usrId" -> usrId, "mdlId" -> mdlId) { _ =>
+ val curFlow = flow.synchronized {
+ flow.getOrElseUpdate(Key(usrId, mdlId), mutable.ArrayBuffer.empty[NCDialogFlowItem])
+ }
+
+ val tbl = NCAsciiTable(
+ "",
+ "Intent ID",
+ "Sever Request ID",
+ "Text",
+ "Received"
+ )
+
+ var i = 1
+
+ curFlow.foreach(x => {
+ tbl += (
+ i,
+ x.getIntentId,
+ m(x.getServerRequestId),
+ x.getNormalizedText,
+ DateFormat.getDateTimeInstance.format(new Date(x.getReceiveTimestamp))
+ )
+
+ i += 1
+ })
+
+ logger.info(s"Current dialog flow (oldest first) for [" +
+ s"mdlId=$mdlId, " +
+ s"usrId=$usrId" +
+ s"]:\n${tbl.toString()}")
+ }
+ }
+
+ /**
* Gets next clearing time.
*/
private def clearForTimeout(): Long =
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 f4d2afe..a12a4e8 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
@@ -270,7 +270,7 @@
tbl += (s"${b("Server Request ID")}", m(srvReqId))
tbl += (s"${b("Data")}", U.prettyJson(data.orNull).split("\n").toSeq)
- logger.info(s"New request received:\n$tbl")
+ logger.info(s"New user request received:\n$tbl")
val enabledBuiltInToks = NCProbeManager.getModel(mdlId, span).enabledBuiltInTokens
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 b24a5e8..93fa702 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
@@ -213,7 +213,7 @@
private def clearSession(ses: SigninSession): Unit = {
clearSigninCache(ses)
- logger.info(s"User signed out: ${ses.userId}")
+ logger.info(s"User ID signed out: ${ses.userId}")
}
/**