From c9be7a6329af27c93bec8a25f8866b3712c2425f Mon Sep 17 00:00:00 2001 From: To-om Date: Thu, 15 Dec 2016 14:21:41 +0100 Subject: [PATCH] #53 add Cortex name in status API. Preserver Cortex name order in listAnalyzers API --- thehive-backend/app/connectors/Connectors.scala | 6 ++++-- thehive-backend/app/controllers/Status.scala | 2 +- .../app/connectors/cortex/services/CortexSrv.scala | 2 +- thehive-cortex/app/controllers/CortextCtrl.scala | 5 ++++- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/thehive-backend/app/connectors/Connectors.scala b/thehive-backend/app/connectors/Connectors.scala index 71666353f4..5aee33826a 100644 --- a/thehive-backend/app/connectors/Connectors.scala +++ b/thehive-backend/app/connectors/Connectors.scala @@ -4,17 +4,19 @@ import javax.inject.Inject import scala.collection.immutable +import play.api.libs.json.{ JsObject, Json } import play.api.mvc.{ Action, Results } import play.api.routing.{ Router, SimpleRouter } import play.api.routing.sird.UrlContext -import net.codingwell.scalaguice.{ ScalaModule, ScalaMultibinder } - import com.google.inject.AbstractModule +import net.codingwell.scalaguice.{ ScalaModule, ScalaMultibinder } + trait Connector { val name: String val router: Router + val status: JsObject = Json.obj("enabled" → true) } class ConnectorRouter @Inject() (connectors: immutable.Set[Connector]) extends SimpleRouter { diff --git a/thehive-backend/app/controllers/Status.scala b/thehive-backend/app/controllers/Status.scala index faa19687b2..ddfd6d0839 100644 --- a/thehive-backend/app/controllers/Status.scala +++ b/thehive-backend/app/controllers/Status.scala @@ -36,7 +36,7 @@ class StatusCtrl @Inject() ( "Play" → getVersion(classOf[Controller]), "Elastic4s" → getVersion(classOf[ElasticDsl]), "ElasticSearch" → getVersion(classOf[org.elasticsearch.Build])), - "connectors" → JsObject(connectors.map(c ⇒ c.name → Json.obj("enabled" → true)).toSeq), + "connectors" → JsObject(connectors.map(c ⇒ c.name → c.status).toSeq), "config" → Json.obj( "authType" → (authSrv match { case multiAuthSrv: MultiAuthSrv ⇒ multiAuthSrv.authProviders.map { a ⇒ JsString(a.name) } diff --git a/thehive-cortex/app/connectors/cortex/services/CortexSrv.scala b/thehive-cortex/app/connectors/cortex/services/CortexSrv.scala index d5d91cca5e..7a170870ad 100644 --- a/thehive-cortex/app/connectors/cortex/services/CortexSrv.scala +++ b/thehive-cortex/app/connectors/cortex/services/CortexSrv.scala @@ -151,7 +151,7 @@ class CortexSrv @Inject() ( analysers .groupBy(_.name) .values - .map(_.reduce((a1, a2) ⇒ a1.copy(cortexIds = a1.cortexIds ::: a2.cortexIds))) + .map(_.reduceLeft((a1, a2) ⇒ a1.copy(cortexIds = a1.cortexIds ::: a2.cortexIds))) .toSeq } } diff --git a/thehive-cortex/app/controllers/CortextCtrl.scala b/thehive-cortex/app/controllers/CortextCtrl.scala index 39b647d824..0c5f188c41 100644 --- a/thehive-cortex/app/controllers/CortextCtrl.scala +++ b/thehive-cortex/app/controllers/CortextCtrl.scala @@ -6,6 +6,7 @@ import scala.concurrent.ExecutionContext import play.api.Logger import play.api.http.Status +import play.api.libs.json.Json import play.api.mvc.Controller import play.api.routing.SimpleRouter import play.api.routing.sird.{ DELETE, GET, PATCH, POST, UrlContext } @@ -18,11 +19,12 @@ import org.elastic4play.services.JsonFormat.queryReads import connectors.Connector import connectors.cortex.models.JsonFormat.{ analyzerFormats, cortexJobFormat } -import connectors.cortex.services.CortexSrv +import connectors.cortex.services.{ CortexConfig, CortexSrv } @Singleton class CortextCtrl @Inject() ( reportTemplateCtrl: ReportTemplateCtrl, + cortexConfig: CortexConfig, cortexSrv: CortexSrv, authenticated: Authenticated, fieldsBodyParser: FieldsBodyParser, @@ -30,6 +32,7 @@ class CortextCtrl @Inject() ( implicit val ec: ExecutionContext) extends Controller with Connector with Status { val name = "cortex" val log = Logger(getClass) + override val status = Json.obj("enabled" → true, "servers" → cortexConfig.instances.map(_.name)) val router = SimpleRouter { case POST(p"/job") ⇒ createJob case GET(p"/job/$jobId<[^/]*>") ⇒ getJob(jobId)