aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/com/drivergrp/core/app.scala
diff options
context:
space:
mode:
authorvlad <vlad@drivergrp.com>2016-07-17 20:46:10 -0400
committervlad <vlad@drivergrp.com>2016-07-17 20:46:10 -0400
commit9cb5df86335b01e770eb656aa5eda3692410276e (patch)
tree9e92787feed60585400da13110fb9a3bf26e0d96 /src/main/scala/com/drivergrp/core/app.scala
parentc5f1be05d99059421fdd203f21fd80378ba80b41 (diff)
downloaddriver-core-9cb5df86335b01e770eb656aa5eda3692410276e.tar.gz
driver-core-9cb5df86335b01e770eb656aa5eda3692410276e.tar.bz2
driver-core-9cb5df86335b01e770eb656aa5eda3692410276e.zip
App interruption and formats for Time
Diffstat (limited to 'src/main/scala/com/drivergrp/core/app.scala')
-rw-r--r--src/main/scala/com/drivergrp/core/app.scala26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/main/scala/com/drivergrp/core/app.scala b/src/main/scala/com/drivergrp/core/app.scala
index 97e09b5..53239e0 100644
--- a/src/main/scala/com/drivergrp/core/app.scala
+++ b/src/main/scala/com/drivergrp/core/app.scala
@@ -12,6 +12,9 @@ import com.drivergrp.core.rest.Swagger
import com.typesafe.config.Config
import org.slf4j.LoggerFactory
+import scala.concurrent.Await
+import scala.concurrent.duration._
+
object app {
@@ -21,22 +24,33 @@ object app {
config: Config = com.drivergrp.core.config.loadDefaultConfig,
interface: String = "localhost", port: Int = 8080) {
+ implicit private lazy val actorSystem = ActorSystem("spray-routing", config)
+ implicit private lazy val executionContext = actorSystem.dispatcher
+ implicit private lazy val materializer = ActorMaterializer()(actorSystem)
+ private lazy val http = Http()(actorSystem)
+
+
def run() = {
activateServices(modules)
scheduleServicesDeactivation(modules)
bindHttp(modules)
+ Console.print(s"${this.getClass.getName} App is started")
+ }
+
+ def stop() = {
+ http.shutdownAllConnectionPools().onComplete { _ =>
+ actorSystem.terminate()
+ Await.result(actorSystem.whenTerminated, 30.seconds)
+ Console.print(s"${this.getClass.getName} App is stopped")
+ }
}
- protected def bindHttp(modules: Seq[Module]) {
- implicit val actorSystem = ActorSystem("spray-routing", config)
- implicit val executionContext = actorSystem.dispatcher
- implicit val materializer = ActorMaterializer()(actorSystem)
+ protected def bindHttp(modules: Seq[Module]) {
val serviceTypes = modules.flatMap(_.routeTypes)
val swaggerService = new Swagger(actorSystem, serviceTypes, config)
val swaggerRoutes = swaggerService.routes ~ swaggerService.swaggerUI
-
- Http()(actorSystem).bindAndHandle(
+ http.bindAndHandle(
route2HandlerFlow(logRequestResult("log")(modules.map(_.route).foldLeft(swaggerRoutes) { _ ~ _ })),
interface, port)(materializer)
}