aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvlad <vlad@drivergrp.com>2016-07-16 15:55:19 -0400
committervlad <vlad@drivergrp.com>2016-07-16 15:55:19 -0400
commitc948b1f2c1c7a5246d5c1a7cba05e6e27a9d7b57 (patch)
tree8737b3bc5e49c287173f52ca936d36fceb86b4d0
parent482459a63433c281b7a576236111e6a86e4521c9 (diff)
downloaddriver-core-c948b1f2c1c7a5246d5c1a7cba05e6e27a9d7b57.tar.gz
driver-core-c948b1f2c1c7a5246d5c1a7cba05e6e27a9d7b57.tar.bz2
driver-core-c948b1f2c1c7a5246d5c1a7cba05e6e27a9d7b57.zip
Modules consolidation
-rw-r--r--src/main/scala/com/drivergrp/core/DriverApp.scala77
-rw-r--r--src/main/scala/com/drivergrp/core/Swagger.scala45
-rw-r--r--src/main/scala/com/drivergrp/core/app.scala115
-rw-r--r--src/main/scala/com/drivergrp/core/core.scala (renamed from src/main/scala/com/drivergrp/core/id.scala)21
-rw-r--r--src/main/scala/com/drivergrp/core/database.scala1
-rw-r--r--src/main/scala/com/drivergrp/core/generators.scala2
-rw-r--r--src/main/scala/com/drivergrp/core/module.scala39
-rw-r--r--src/main/scala/com/drivergrp/core/package.scala19
-rw-r--r--src/main/scala/com/drivergrp/core/rest.scala42
9 files changed, 174 insertions, 187 deletions
diff --git a/src/main/scala/com/drivergrp/core/DriverApp.scala b/src/main/scala/com/drivergrp/core/DriverApp.scala
deleted file mode 100644
index b361c15..0000000
--- a/src/main/scala/com/drivergrp/core/DriverApp.scala
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.drivergrp.core
-
-import akka.actor.ActorSystem
-import akka.http.scaladsl.Http
-import akka.http.scaladsl.server.Directives._
-import akka.http.scaladsl.server.RouteResult._
-import akka.stream.ActorMaterializer
-import com.drivergrp.core.logging.{Logger, TypesafeScalaLogger}
-import com.drivergrp.core.module.Module
-import com.typesafe.config.Config
-import org.slf4j.LoggerFactory
-
-
-class DriverApp(modules: Seq[Module],
- log: Logger = new TypesafeScalaLogger(
- com.typesafe.scalalogging.Logger(LoggerFactory.getLogger(classOf[DriverApp]))),
- config: Config = com.drivergrp.core.config.loadDefaultConfig,
- interface: String = "localhost", port: Int = 8080) {
-
- def run() = {
- activateServices(modules)
- scheduleServicesDeactivation(modules)
- bindHttp(modules)
- }
-
- protected def bindHttp(modules: Seq[Module]) {
- implicit val actorSystem = ActorSystem("spray-routing", config)
- implicit val executionContext = actorSystem.dispatcher
- implicit val materializer = ActorMaterializer()(actorSystem)
-
- val serviceTypes = modules.flatMap(_.routeTypes)
- val swaggerService = new Swagger(actorSystem, serviceTypes, config)
- val swaggerRoutes = swaggerService.routes ~ swaggerService.swaggerUI
-
- Http()(actorSystem).bindAndHandle(
- route2HandlerFlow(logRequestResult("log")(modules.map(_.route).foldLeft(swaggerRoutes) { _ ~ _ })),
- interface, port)(materializer)
- }
-
- /**
- * Initializes services
- */
- protected def activateServices(services: Seq[Module]) = {
- services.foreach { service =>
- Console.print(s"Service ${service.name} starts ...")
- try {
- service.activate()
- } catch {
- case t: Throwable =>
- log.fatal(s"Service ${service.name} failed to activate", t)
- Console.print(" Failed! (check log)")
- }
- Console.println(" Done")
- }
- }
-
- /**
- * Schedules services to be deactivated on the app shutdown
- */
- protected def scheduleServicesDeactivation(services: Seq[Module]) = {
- Runtime.getRuntime.addShutdownHook(new Thread() {
- override def run(): Unit = {
- services.foreach { service =>
- Console.print(s"Service ${service.name} shutting down ...")
- try {
- service.deactivate()
- } catch {
- case t: Throwable =>
- log.fatal(s"Service ${service.name} failed to deactivate", t)
- Console.print(" Failed! (check log)")
- }
- Console.println(" Done")
- }
- }
- })
- }
-}
diff --git a/src/main/scala/com/drivergrp/core/Swagger.scala b/src/main/scala/com/drivergrp/core/Swagger.scala
deleted file mode 100644
index 428920c..0000000
--- a/src/main/scala/com/drivergrp/core/Swagger.scala
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.drivergrp.core
-
-import akka.actor.ActorSystem
-import akka.stream.ActorMaterializer
-import com.github.swagger.akka.model._
-import com.github.swagger.akka.{HasActorSystem, SwaggerHttpService}
-import com.typesafe.config.Config
-
-import scala.reflect.runtime.universe._
-
-
-class Swagger(override val actorSystem: ActorSystem,
- override val apiTypes: Seq[Type],
- val config: Config) extends SwaggerHttpService with HasActorSystem {
-
- val materializer = ActorMaterializer()(actorSystem)
-
- override val host = "localhost:8080" //the url of your api, not swagger's json endpoint
- override val basePath = config.getString("swagger.basePath")
- override val apiDocsPath = config.getString("swagger.docsPath")
-
- override val info = Info(
- config.getString("swagger.apiInfo.description"),
- config.getString("swagger.apiVersion"),
- config.getString("swagger.apiInfo.title"),
- config.getString("swagger.apiInfo.termsOfServiceUrl"),
- contact = Some(Contact(
- config.getString("swagger.apiInfo.contact.name"),
- config.getString("swagger.apiInfo.contact.url"),
- config.getString("swagger.apiInfo.contact.email")
- )),
- license = Some(License(
- config.getString("swagger.apiInfo.license"),
- config.getString("swagger.apiInfo.licenseUrl")
- )),
- vendorExtensions = Map())
-
- def swaggerUI = get {
- pathPrefix("") {
- pathEndOrSingleSlash {
- getFromResource("swagger-ui/index.html")
- }
- } ~ getFromResourceDirectory("swagger-ui")
- }
-} \ No newline at end of file
diff --git a/src/main/scala/com/drivergrp/core/app.scala b/src/main/scala/com/drivergrp/core/app.scala
new file mode 100644
index 0000000..34a92e3
--- /dev/null
+++ b/src/main/scala/com/drivergrp/core/app.scala
@@ -0,0 +1,115 @@
+package com.drivergrp.core
+
+import akka.actor.ActorSystem
+import akka.http.scaladsl.Http
+import akka.http.scaladsl.server.Directives._
+import akka.http.scaladsl.server.RouteResult._
+import akka.stream.ActorMaterializer
+import com.drivergrp.core.logging.{Logger, TypesafeScalaLogger}
+import akka.http.scaladsl.server.{Route, RouteConcatenation}
+import com.drivergrp.core.rest.Swagger
+import com.typesafe.config.Config
+import org.slf4j.LoggerFactory
+
+
+object app {
+
+ class DriverApp(modules: Seq[Module],
+ log: Logger = new TypesafeScalaLogger(
+ com.typesafe.scalalogging.Logger(LoggerFactory.getLogger(classOf[DriverApp]))),
+ config: Config = com.drivergrp.core.config.loadDefaultConfig,
+ interface: String = "localhost", port: Int = 8080) {
+
+ def run() = {
+ activateServices(modules)
+ scheduleServicesDeactivation(modules)
+ bindHttp(modules)
+ }
+
+ protected def bindHttp(modules: Seq[Module]) {
+ implicit val actorSystem = ActorSystem("spray-routing", config)
+ implicit val executionContext = actorSystem.dispatcher
+ implicit val materializer = ActorMaterializer()(actorSystem)
+
+ val serviceTypes = modules.flatMap(_.routeTypes)
+ val swaggerService = new Swagger(actorSystem, serviceTypes, config)
+ val swaggerRoutes = swaggerService.routes ~ swaggerService.swaggerUI
+
+ Http()(actorSystem).bindAndHandle(
+ route2HandlerFlow(logRequestResult("log")(modules.map(_.route).foldLeft(swaggerRoutes) { _ ~ _ })),
+ interface, port)(materializer)
+ }
+
+ /**
+ * Initializes services
+ */
+ protected def activateServices(services: Seq[Module]) = {
+ services.foreach { service =>
+ Console.print(s"Service ${service.name} starts ...")
+ try {
+ service.activate()
+ } catch {
+ case t: Throwable =>
+ log.fatal(s"Service ${service.name} failed to activate", t)
+ Console.print(" Failed! (check log)")
+ }
+ Console.println(" Done")
+ }
+ }
+
+ /**
+ * Schedules services to be deactivated on the app shutdown
+ */
+ protected def scheduleServicesDeactivation(services: Seq[Module]) = {
+ Runtime.getRuntime.addShutdownHook(new Thread() {
+ override def run(): Unit = {
+ services.foreach { service =>
+ Console.print(s"Service ${service.name} shutting down ...")
+ try {
+ service.deactivate()
+ } catch {
+ case t: Throwable =>
+ log.fatal(s"Service ${service.name} failed to deactivate", t)
+ Console.print(" Failed! (check log)")
+ }
+ Console.println(" Done")
+ }
+ }
+ })
+ }
+ }
+
+
+ import scala.reflect.runtime.universe._
+
+ trait Module {
+ val name: String
+ def route: Route
+ def routeTypes: Seq[Type]
+
+ def activate(): Unit = {}
+ def deactivate(): Unit = {}
+ }
+
+ class SimpleModule(val name: String, val route: Route, routeType: Type) extends Module {
+ def routeTypes: Seq[Type] = Seq(routeType)
+ }
+
+ /**
+ * Module implementation which may be used to composed a few
+ *
+ * @param name more general name of the composite module,
+ * must be provided as there is no good way to automatically
+ * generalize the name from the composed modules' names
+ * @param modules modules to compose into a single one
+ */
+ class CompositeModule(val name: String, modules: Seq[Module])
+ extends Module with RouteConcatenation {
+
+ def route: Route = modules.map(_.route).reduce(_ ~ _)
+ def routeTypes = modules.flatMap(_.routeTypes)
+
+ override def activate() = modules.foreach(_.activate())
+ override def deactivate() = modules.reverse.foreach(_.deactivate())
+ }
+}
diff --git a/src/main/scala/com/drivergrp/core/id.scala b/src/main/scala/com/drivergrp/core/core.scala
index 29b8d99..51459a7 100644
--- a/src/main/scala/com/drivergrp/core/id.scala
+++ b/src/main/scala/com/drivergrp/core/core.scala
@@ -1,9 +1,24 @@
-package com.drivergrp.core
+package com.drivergrp
-import scalaz._
+import scalaz.Equal
-object id {
+package object core {
+ import scala.language.reflectiveCalls
+
+ def make[T](v: => T)(f: T => Unit): T = {
+ val value = v; f(value); value
+ }
+
+ def using[R <: { def close() }, P](r: => R)(f: R => P): P = {
+ val resource = r
+ try {
+ f(resource)
+ } finally {
+ resource.close()
+ }
+ }
+
trait Tagged[+V, +Tag]
type @@[+V, +Tag] = V with Tagged[V, Tag]
diff --git a/src/main/scala/com/drivergrp/core/database.scala b/src/main/scala/com/drivergrp/core/database.scala
index 89cfac1..b23c953 100644
--- a/src/main/scala/com/drivergrp/core/database.scala
+++ b/src/main/scala/com/drivergrp/core/database.scala
@@ -1,6 +1,5 @@
package com.drivergrp.core
-import com.drivergrp.core.id.{Id, Name}
import scala.concurrent.Future
import slick.backend.DatabaseConfig
import slick.driver.JdbcProfile
diff --git a/src/main/scala/com/drivergrp/core/generators.scala b/src/main/scala/com/drivergrp/core/generators.scala
index 89d6e56..7f51078 100644
--- a/src/main/scala/com/drivergrp/core/generators.scala
+++ b/src/main/scala/com/drivergrp/core/generators.scala
@@ -1,8 +1,6 @@
package com.drivergrp.core
import java.math.MathContext
-
-import com.drivergrp.core.id.{Id, Name}
import com.drivergrp.core.time.{Time, TimeRange}
import scala.reflect.ClassTag
diff --git a/src/main/scala/com/drivergrp/core/module.scala b/src/main/scala/com/drivergrp/core/module.scala
deleted file mode 100644
index 94dd6a3..0000000
--- a/src/main/scala/com/drivergrp/core/module.scala
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.drivergrp.core
-
-import akka.http.scaladsl.server.{Route, RouteConcatenation}
-
-
-object module {
- import scala.reflect.runtime.universe._
-
- trait Module {
- val name: String
- def route: Route
- def routeTypes: Seq[Type]
-
- def activate(): Unit = {}
- def deactivate(): Unit = {}
- }
-
- class SimpleModule(val name: String, val route: Route, routeType: Type) extends Module {
- def routeTypes: Seq[Type] = Seq(routeType)
- }
-
- /**
- * Module implementation which may be used to composed a few
- *
- * @param name more general name of the composite module,
- * must be provided as there is no good way to automatically
- * generalize the name from the composed modules' names
- * @param modules modules to compose into a single one
- */
- class CompositeModule(val name: String, modules: Seq[Module])
- extends Module with RouteConcatenation {
-
- def route: Route = modules.map(_.route).reduce(_ ~ _)
- def routeTypes = modules.flatMap(_.routeTypes)
-
- override def activate() = modules.foreach(_.activate())
- override def deactivate() = modules.reverse.foreach(_.deactivate())
- }
-} \ No newline at end of file
diff --git a/src/main/scala/com/drivergrp/core/package.scala b/src/main/scala/com/drivergrp/core/package.scala
deleted file mode 100644
index 3c19431..0000000
--- a/src/main/scala/com/drivergrp/core/package.scala
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.drivergrp
-
-
-package object core {
- import scala.language.reflectiveCalls
-
- def make[T](v: => T)(f: T => Unit): T = {
- val value = v; f(value); value
- }
-
- def using[R <: { def close() }, P](r: => R)(f: R => P): P = {
- val resource = r
- try {
- f(resource)
- } finally {
- resource.close()
- }
- }
-}
diff --git a/src/main/scala/com/drivergrp/core/rest.scala b/src/main/scala/com/drivergrp/core/rest.scala
index 51823da..71aed94 100644
--- a/src/main/scala/com/drivergrp/core/rest.scala
+++ b/src/main/scala/com/drivergrp/core/rest.scala
@@ -7,11 +7,13 @@ import akka.http.scaladsl.server.{Directive, _}
import akka.http.scaladsl.util.FastFuture._
import akka.stream.ActorMaterializer
import akka.util.Timeout
-import com.drivergrp.core.id.{Id, Name}
import com.drivergrp.core.logging.Logger
import com.drivergrp.core.stats.Stats
import com.drivergrp.core.time.TimeRange
import com.drivergrp.core.time.provider.TimeProvider
+import com.github.swagger.akka.model._
+import com.github.swagger.akka.{HasActorSystem, SwaggerHttpService}
+import com.typesafe.config.Config
import spray.json.{DeserializationException, JsNumber, JsString, JsValue, RootJsonFormat}
import scala.concurrent.duration._
@@ -97,4 +99,42 @@ object rest {
optionT.run.fast.transformWith(t ⇒ inner(Tuple1(t))(ctx))
}
}
+
+
+ import scala.reflect.runtime.universe._
+
+ class Swagger(override val actorSystem: ActorSystem,
+ override val apiTypes: Seq[Type],
+ val config: Config) extends SwaggerHttpService with HasActorSystem {
+
+ val materializer = ActorMaterializer()(actorSystem)
+
+ override val host = "localhost:8080" //the url of your api, not swagger's json endpoint
+ override val basePath = config.getString("swagger.basePath")
+ override val apiDocsPath = config.getString("swagger.docsPath")
+
+ override val info = Info(
+ config.getString("swagger.apiInfo.description"),
+ config.getString("swagger.apiVersion"),
+ config.getString("swagger.apiInfo.title"),
+ config.getString("swagger.apiInfo.termsOfServiceUrl"),
+ contact = Some(Contact(
+ config.getString("swagger.apiInfo.contact.name"),
+ config.getString("swagger.apiInfo.contact.url"),
+ config.getString("swagger.apiInfo.contact.email")
+ )),
+ license = Some(License(
+ config.getString("swagger.apiInfo.license"),
+ config.getString("swagger.apiInfo.licenseUrl")
+ )),
+ vendorExtensions = Map())
+
+ def swaggerUI = get {
+ pathPrefix("") {
+ pathEndOrSingleSlash {
+ getFromResource("swagger-ui/index.html")
+ }
+ } ~ getFromResourceDirectory("swagger-ui")
+ }
+ }
}