aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvlad <vlad@drivergrp.com>2016-08-15 17:22:38 -0700
committervlad <vlad@drivergrp.com>2016-08-15 17:22:38 -0700
commitd6237e4cef0f912e2acc7d55e7787caab550aebe (patch)
treeff2a1bb2b6cfcc6417e12fb5b730801720cfda53
parent8a0c92de6c6481a055cfa482e875b31087a3ff41 (diff)
downloaddriver-core-d6237e4cef0f912e2acc7d55e7787caab550aebe.tar.gz
driver-core-d6237e4cef0f912e2acc7d55e7787caab550aebe.tar.bz2
driver-core-d6237e4cef0f912e2acc7d55e7787caab550aebe.zip
More cases for exception handler + Implicits back from the companion objects + Formatting
-rw-r--r--src/main/scala/com/drivergrp/core/app.scala29
-rw-r--r--src/main/scala/com/drivergrp/core/core.scala15
-rw-r--r--src/main/scala/com/drivergrp/core/json.scala6
3 files changed, 37 insertions, 13 deletions
diff --git a/src/main/scala/com/drivergrp/core/app.scala b/src/main/scala/com/drivergrp/core/app.scala
index ba18e92..a3ccd9e 100644
--- a/src/main/scala/com/drivergrp/core/app.scala
+++ b/src/main/scala/com/drivergrp/core/app.scala
@@ -16,6 +16,7 @@ import com.typesafe.config.Config
import org.slf4j.LoggerFactory
import spray.json.DefaultJsonProtocol
+import scala.compat.Platform.ConcurrentModificationException
import scala.concurrent.Await
import scala.concurrent.duration._
@@ -59,14 +60,38 @@ object app {
val versionRt = versionRoute(version, buildNumber)
val generalExceptionHandler = ExceptionHandler {
+
+ case is: IllegalStateException =>
+ extractUri { uri =>
+ // TODO: extract `requestUuid` from request or thread, provided by linkerd/zipkin
+ def requestUuid = java.util.UUID.randomUUID.toString
+
+ log.debug(s"Request is not allowed to $uri ($requestUuid)", is)
+ complete(
+ HttpResponse(BadRequest,
+ entity = s"""{ "requestUuid": "$requestUuid", "message": "${is.getMessage}" }"""))
+ }
+
+ case cm: ConcurrentModificationException =>
+ extractUri { uri =>
+ // TODO: extract `requestUuid` from request or thread, provided by linkerd/zipkin
+ def requestUuid = java.util.UUID.randomUUID.toString
+
+ log.debug(s"Concurrent modification of the resource $uri ($requestUuid)", cm)
+ complete(
+ HttpResponse(Conflict,
+ entity = s"""{ "requestUuid": "$requestUuid", "message": "${cm.getMessage}" }"""))
+ }
+
case t: Throwable =>
extractUri { uri =>
// TODO: extract `requestUuid` from request or thread, provided by linkerd/zipkin
def requestUuid = java.util.UUID.randomUUID.toString
log.error(s"Request to $uri could not be handled normally ($requestUuid)", t)
- complete(HttpResponse(InternalServerError,
- entity = s"""{ "requestUuid": "$requestUuid", "message": "${t.getMessage}" }"""))
+ complete(
+ HttpResponse(InternalServerError,
+ entity = s"""{ "requestUuid": "$requestUuid", "message": "${t.getMessage}" }"""))
}
}
diff --git a/src/main/scala/com/drivergrp/core/core.scala b/src/main/scala/com/drivergrp/core/core.scala
index cfa96e7..5bfe017 100644
--- a/src/main/scala/com/drivergrp/core/core.scala
+++ b/src/main/scala/com/drivergrp/core/core.scala
@@ -28,24 +28,21 @@ package object core {
type Id[+Tag] = Long @@ Tag
object Id {
def apply[Tag](value: Long) = value.asInstanceOf[Id[Tag]]
-
- implicit def idEqual[T]: Equal[Id[T]] = Equal.equal[Id[T]](_ == _)
- implicit def idOrdering[T]: Ordering[Id[T]] = Ordering.by(identity)
}
+ implicit def idEqual[T]: Equal[Id[T]] = Equal.equal[Id[T]](_ == _)
+ implicit def idOrdering[T]: Ordering[Id[T]] = Ordering.by(identity)
type Name[+Tag] = String @@ Tag
object Name {
def apply[Tag](value: String) = value.asInstanceOf[Name[Tag]]
-
- implicit def nameEqual[T]: Equal[Name[T]] = Equal.equal[Name[T]](_ == _)
- implicit def nameOrdering[T]: Ordering[Name[T]] = Ordering.by(identity)
}
+ implicit def nameEqual[T]: Equal[Name[T]] = Equal.equal[Name[T]](_ == _)
+ implicit def nameOrdering[T]: Ordering[Name[T]] = Ordering.by(identity)
+
object revision {
final case class Revision[T](id: UUID)
- object Revision {
- implicit def revisionEqual[T]: Equal[Revision[T]] = Equal.equal[Revision[T]](_.id == _.id)
- }
+ implicit def revisionEqual[T]: Equal[Revision[T]] = Equal.equal[Revision[T]](_.id == _.id)
}
}
diff --git a/src/main/scala/com/drivergrp/core/json.scala b/src/main/scala/com/drivergrp/core/json.scala
index 39a07ae..0ac7d04 100644
--- a/src/main/scala/com/drivergrp/core/json.scala
+++ b/src/main/scala/com/drivergrp/core/json.scala
@@ -73,14 +73,16 @@ object json {
}
implicit def revisionFromStringUnmarshaller[T]: Unmarshaller[String, Revision[T]] =
- Unmarshaller.strict[String, Revision[T]] { string => Revision[T](UUID.fromString(string)) }
+ Unmarshaller.strict[String, Revision[T]] { string =>
+ Revision[T](UUID.fromString(string))
+ }
implicit def revisionFormat[T] = new RootJsonFormat[Revision[T]] {
def write(revision: Revision[T]) = JsString(revision.id.toString)
def read(value: JsValue): Revision[T] = value match {
case JsString(revision) => Revision[T](UUID.fromString(revision))
- case _ => throw new DeserializationException("Revision expects uuid string")
+ case _ => throw new DeserializationException("Revision expects uuid string")
}
}