From 0c6a256d6028b4a85e83c6907719c6feabc19dd2 Mon Sep 17 00:00:00 2001 From: To-om Date: Mon, 21 Dec 2020 17:31:43 +0100 Subject: [PATCH] #1720 Add pollingDuration configuration --- .../thehive/controllers/v0/StatusCtrl.scala | 19 ++++++++++++------- .../thehive/controllers/v1/StatusCtrl.scala | 17 +++++++++++------ thehive/conf/reference.conf | 1 + 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/thehive/app/org/thp/thehive/controllers/v0/StatusCtrl.scala b/thehive/app/org/thp/thehive/controllers/v0/StatusCtrl.scala index 944368cc08..9e03134ae1 100644 --- a/thehive/app/org/thp/thehive/controllers/v0/StatusCtrl.scala +++ b/thehive/app/org/thp/thehive/controllers/v0/StatusCtrl.scala @@ -1,9 +1,9 @@ package org.thp.thehive.controllers.v0 -import javax.inject.{Inject, Named, Singleton} import org.thp.scalligraph.auth.{AuthCapability, AuthSrv, MultiAuthSrv} import org.thp.scalligraph.controllers.Entrypoint import org.thp.scalligraph.models.Database +import org.thp.scalligraph.services.config.ApplicationConfig.finiteDurationFormat import org.thp.scalligraph.services.config.{ApplicationConfig, ConfigItem} import org.thp.scalligraph.{EntityName, ScalligraphApplicationLoader} import org.thp.thehive.TheHiveModule @@ -12,7 +12,9 @@ import org.thp.thehive.services.{Connector, UserSrv} import play.api.libs.json.{JsObject, JsString, Json} import play.api.mvc.{AbstractController, Action, AnyContent, Results} +import javax.inject.{Inject, Named, Singleton} import scala.collection.immutable +import scala.concurrent.duration.FiniteDuration import scala.util.Success @Singleton @@ -26,6 +28,12 @@ class StatusCtrl @Inject() ( ) { val passwordConfig: ConfigItem[String, String] = appConfig.item[String]("datastore.attachment.password", "Password used to protect attachment ZIP") + def password: String = passwordConfig.get + val streamPollingDurationConfig: ConfigItem[FiniteDuration, FiniteDuration] = + appConfig.item[FiniteDuration]("stream.longPolling.pollingDuration", "amount of time the UI have to wait before polling the stream") + def streamPollingDuration: FiniteDuration = streamPollingDurationConfig.get + + private def getVersion(c: Class[_]): String = Option(c.getPackage.getImplementationVersion).getOrElse("SNAPSHOT") def get: Action[AnyContent] = entrypoint("status") { _ => @@ -44,18 +52,15 @@ class StatusCtrl @Inject() ( case multiAuthSrv: MultiAuthSrv => Json.toJson(multiAuthSrv.providerNames) case _ => JsString(authSrv.name) }), - "capabilities" -> authSrv.capabilities.map(c => JsString(c.toString)), - "ssoAutoLogin" -> authSrv.capabilities.contains(AuthCapability.sso) + "capabilities" -> authSrv.capabilities.map(c => JsString(c.toString)), + "ssoAutoLogin" -> authSrv.capabilities.contains(AuthCapability.sso), + "pollingDuration" -> streamPollingDuration.toMillis ) ) ) ) } - def password: String = passwordConfig.get - - private def getVersion(c: Class[_]): String = Option(c.getPackage.getImplementationVersion).getOrElse("SNAPSHOT") - def health: Action[AnyContent] = entrypoint("health") { _ => val dbStatus = db diff --git a/thehive/app/org/thp/thehive/controllers/v1/StatusCtrl.scala b/thehive/app/org/thp/thehive/controllers/v1/StatusCtrl.scala index e1602e9a5e..1289dc0e89 100644 --- a/thehive/app/org/thp/thehive/controllers/v1/StatusCtrl.scala +++ b/thehive/app/org/thp/thehive/controllers/v1/StatusCtrl.scala @@ -1,18 +1,19 @@ package org.thp.thehive.controllers.v1 import akka.actor.ActorSystem -import akka.cluster.{Cluster, Member} import akka.cluster.ClusterEvent.CurrentClusterState - -import javax.inject.{Inject, Singleton} +import akka.cluster.{Cluster, Member} import org.thp.scalligraph.ScalligraphApplicationLoader import org.thp.scalligraph.auth.{AuthCapability, AuthSrv, MultiAuthSrv} import org.thp.scalligraph.controllers.Entrypoint +import org.thp.scalligraph.services.config.ApplicationConfig.finiteDurationFormat import org.thp.scalligraph.services.config.{ApplicationConfig, ConfigItem} import org.thp.thehive.TheHiveModule import play.api.libs.json.{JsObject, JsString, Json, Writes} import play.api.mvc.{AbstractController, Action, AnyContent, Results} +import javax.inject.{Inject, Singleton} +import scala.concurrent.duration.FiniteDuration import scala.util.Success @Singleton @@ -22,7 +23,10 @@ class StatusCtrl @Inject() (entrypoint: Entrypoint, appConfig: ApplicationConfig val passwordConfig: ConfigItem[String, String] = appConfig.item[String]("datastore.attachment.password", "Password used to protect attachment ZIP") def password: String = passwordConfig.get - val cluster: Cluster = Cluster(system) + val streamPollingDurationConfig: ConfigItem[FiniteDuration, FiniteDuration] = + appConfig.item[FiniteDuration]("stream.longPolling.pollingDuration", "amount of time the UI have to wait before polling the stream") + def streamPollingDuration: FiniteDuration = streamPollingDurationConfig.get + val cluster: Cluster = Cluster(system) implicit val memberWrites: Writes[Member] = Writes[Member] { member => Json.obj( @@ -59,8 +63,9 @@ class StatusCtrl @Inject() (entrypoint: Entrypoint, appConfig: ApplicationConfig case multiAuthSrv: MultiAuthSrv => Json.toJson(multiAuthSrv.providerNames) case _ => JsString(authSrv.name) }), - "capabilities" -> authSrv.capabilities.map(c => JsString(c.toString)), - "ssoAutoLogin" -> authSrv.capabilities.contains(AuthCapability.sso) + "capabilities" -> authSrv.capabilities.map(c => JsString(c.toString)), + "ssoAutoLogin" -> authSrv.capabilities.contains(AuthCapability.sso), + "pollingDuration" -> streamPollingDuration.toMillis ), "cluster" -> cluster.state ) diff --git a/thehive/conf/reference.conf b/thehive/conf/reference.conf index f9f5bf54d3..403e23198c 100644 --- a/thehive/conf/reference.conf +++ b/thehive/conf/reference.conf @@ -41,6 +41,7 @@ stream.longPolling { maxWait: 1 second graceDuration: 100 milliseconds keepAlive: 5 minutes + pollingDuration: 1 second } tags {