Skip to content

Commit

Permalink
#1720 Add pollingDuration configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
To-om committed Dec 21, 2020
1 parent fda39c7 commit 0c6a256
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 13 deletions.
19 changes: 12 additions & 7 deletions thehive/app/org/thp/thehive/controllers/v0/StatusCtrl.scala
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand All @@ -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") { _ =>
Expand All @@ -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
Expand Down
17 changes: 11 additions & 6 deletions thehive/app/org/thp/thehive/controllers/v1/StatusCtrl.scala
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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(
Expand Down Expand Up @@ -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
)
Expand Down
1 change: 1 addition & 0 deletions thehive/conf/reference.conf
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ stream.longPolling {
maxWait: 1 second
graceDuration: 100 milliseconds
keepAlive: 5 minutes
pollingDuration: 1 second
}

tags {
Expand Down

0 comments on commit 0c6a256

Please sign in to comment.