You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nlpcraft.apache.org by se...@apache.org on 2020/09/06 13:57:22 UTC
[incubator-nlpcraft] 01/01: WIP.
This is an automated email from the ASF dual-hosted git repository.
sergeykamov pushed a commit to branch NLPCRAFT-114
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git
commit c574058b72c45932d9d8d17e90ce5fc0b793673a
Author: Sergey Kamov <se...@apache.org>
AuthorDate: Sun Sep 6 16:57:06 2020 +0300
WIP.
---
.../nlpcraft/server/ignite/NCIgniteHelpers.scala | 39 ---------------
.../inspection/impl/NCSuggestionInspection.scala | 6 ++-
.../nlpcraft/server/rest/NCBasicRestApi.scala | 57 +++++++++++++++++-----
3 files changed, 49 insertions(+), 53 deletions(-)
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/ignite/NCIgniteHelpers.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/ignite/NCIgniteHelpers.scala
index a44427c..988315e 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/ignite/NCIgniteHelpers.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/ignite/NCIgniteHelpers.scala
@@ -19,9 +19,7 @@ package org.apache.nlpcraft.server.ignite
import java.util.UUID
-import javax.cache.Cache
import org.apache.ignite.IgniteCache
-import org.apache.ignite.cache.query.{QueryCursor, SqlQuery}
import org.apache.ignite.events.CacheEvent
import org.apache.ignite.lang.{IgniteBiPredicate, IgnitePredicate}
@@ -129,42 +127,5 @@ object NCIgniteHelpers extends NCIgniteInstance {
case v if v != null ⇒ Some(v)
case null ⇒ None
}
-
- /**
- * SQL request to the cache.
- *
- * @param cls Type.
- * @param clause SQL request.
- * @param args Arguments for SQL request.
- * @return
- */
- def select(cls: Class[_ <: V], clause: String, args: Any*): QueryCursor[Cache.Entry[K, V]] = {
- assert(cls != null)
- assert(clause != null)
- assert(args != null)
-
- // TODO: deprecated to what & how?
- // TODO: Ignite is missing instructions on this migration.
- // TODO: Perhaps - https://stackoverflow.com/questions/41309941/sqlquery-and-sqlfieldsquery
- val qry = new SqlQuery[K, V](cls, clause)
-
- if (args != null && args.nonEmpty)
- qry.setArgs(args.map(_.asInstanceOf[AnyRef]): _*)
-
- ic.query(qry)
- }
-
- /**
- * SQL request to the cache.
- *
- * @param clause SQL request.
- * @param args Arguments for SQL request.
- **/
- def select(clause: String, args: Any*)(implicit m: Manifest[V]): QueryCursor[Cache.Entry[K, V]] = {
- assert(clause != null)
- assert(args != null)
-
- select(m.runtimeClass.asInstanceOf[Class[V]], clause, args: _*)
- }
}
}
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/inspection/impl/NCSuggestionInspection.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/inspection/impl/NCSuggestionInspection.scala
index a9a54f8..90eaf25 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/inspection/impl/NCSuggestionInspection.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/inspection/impl/NCSuggestionInspection.scala
@@ -42,6 +42,7 @@ import org.apache.nlpcraft.server.probe.NCProbeManager
import scala.collection.JavaConverters._
import scala.collection.{Seq, mutable}
import scala.concurrent.{Future, Promise}
+import scala.util.{Failure, Success}
/**
* Synonym suggestion inspection.
@@ -132,8 +133,8 @@ object NCSuggestionInspection extends NCInspectionService {
val promise = Promise[NCInspectionResult]()
- NCProbeManager.getModelInfo(mdlId, parent).collect {
- case m: java.util.Map[String, AnyRef] ⇒
+ NCProbeManager.getModelInfo(mdlId, parent).onComplete {
+ case Success(m) ⇒
try {
require(
m.containsKey("macros") && m.containsKey("elementsSynonyms") && m.containsKey("intentsSamples")
@@ -429,6 +430,7 @@ object NCSuggestionInspection extends NCInspectionService {
promise.failure(e)
}
+ case Failure(e) ⇒ promise.failure(e)
}(getExecutor)
promise.future
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala
index fd9a2cc..44b8b28 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala
@@ -519,17 +519,23 @@ class NCBasicRestApi extends NCRestApi with LazyLogging with NCOpenCensusTrace w
optionalHeaderValueByName("User-Agent") { usrAgent ⇒
extractClientIP { rmtAddr ⇒
+ val fut = NCQueryManager.futureAsk(
+ getUserId(acsUsr, usrIdOpt, usrExtIdOpt),
+ txt,
+ mdlId,
+ usrAgent,
+ getAddress(rmtAddr),
+ data,
+ enableLog.getOrElse(false),
+ span
+ )
+
+ fut.failed.collect {
+ case e ⇒ onError(e)
+ }
+
successWithJs(
- NCQueryManager.futureAsk(
- getUserId(acsUsr, usrIdOpt, usrExtIdOpt),
- txt,
- mdlId,
- usrAgent,
- getAddress(rmtAddr),
- data,
- enableLog.getOrElse(false),
- span
- ).collect {
+ fut.collect {
// We have to use GSON (not spray) here to serialize `resBody` field.
case res ⇒ GSON.toJson(
Map(
@@ -549,7 +555,6 @@ class NCBasicRestApi extends NCRestApi with LazyLogging with NCOpenCensusTrace w
/**
*
* @param fut
- * @return
*/
private def successWithJs(fut: Future[String]) = onSuccess(fut) {
js ⇒ complete(HttpResponse(entity = HttpEntity(ContentTypes.`application/json`, js)))
@@ -557,6 +562,28 @@ class NCBasicRestApi extends NCRestApi with LazyLogging with NCOpenCensusTrace w
/**
*
+ * @param e
+ */
+ private def onError(e: Throwable): Unit = {
+ val errMsg = e.getLocalizedMessage
+ val code =
+ e match {
+ case _: NCE ⇒
+ // We have to log error reason because even general exceptions are not expected here.
+ logger.warn(s"Unexpected top level REST API error: $errMsg", e)
+
+ StatusCodes.BadRequest
+ case _ ⇒
+ logger.error(s"Unexpected system error: $errMsg", e)
+
+ StatusCodes.InternalServerError
+ }
+
+ completeError(code, "NC_ERROR", errMsg)
+ }
+
+ /**
+ *
* @return
*/
protected def ask$(): Route = {
@@ -734,8 +761,14 @@ class NCBasicRestApi extends NCRestApi with LazyLogging with NCOpenCensusTrace w
if (!NCProbeManager.getAllProbes(admUsr.companyId, span).exists(_.models.exists(_.id == mdlId)))
throw new NCE(s"Probe not found for model: $mdlId")
+ val fut = NCInspectionManager.inspect(mdlId, inspId, args, span)
+
+ fut.failed.collect {
+ case e ⇒ onError(e)
+ }
+
successWithJs(
- NCInspectionManager.inspect(mdlId, inspId, args, span).collect {
+ fut.collect {
// We have to use GSON (not spray) here to serialize `result` field.
case res ⇒ GSON.toJson(Map("status" → API_OK.toString, "result" → res).asJava)
}