aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Odersky <jakob@driver.xyz>2017-10-04 13:49:38 -0700
committerJakob Odersky <jakob@driver.xyz>2017-10-04 13:49:38 -0700
commit2bee42177529fee5d03a5696b7a5912ca21fe5a3 (patch)
tree57cee368919d8c14d257bc7859deaa4e1d003ce1
parent586ed28262f1609a2338e01236548716e1d2c264 (diff)
downloadtracing-2bee42177529fee5d03a5696b7a5912ca21fe5a3.tar.gz
tracing-2bee42177529fee5d03a5696b7a5912ca21fe5a3.tar.bz2
tracing-2bee42177529fee5d03a5696b7a5912ca21fe5a3.zip
Add logging and noop tracers
-rw-r--r--src/main/scala/LoggingTracer.scala48
-rw-r--r--src/main/scala/NoTracer.scala5
2 files changed, 53 insertions, 0 deletions
diff --git a/src/main/scala/LoggingTracer.scala b/src/main/scala/LoggingTracer.scala
new file mode 100644
index 0000000..b22d22a
--- /dev/null
+++ b/src/main/scala/LoggingTracer.scala
@@ -0,0 +1,48 @@
+package xyz.driver.tracing
+
+import java.util.UUID
+import java.time.{Instant, ZoneId}
+import java.time.format.DateTimeFormatter
+import akka.event.LoggingAdapter
+import spray.json._
+
+class LoggingTracer(implicit logger: LoggingAdapter) extends Tracer {
+ import LoggingTracer.JsonProtocol._
+
+ override def submit(span: Span): Unit = logger.debug(
+ span.toJson.compactPrint
+ )
+}
+
+object LoggingTracer {
+
+ object JsonProtocol extends DefaultJsonProtocol {
+ implicit def uuidFormat: JsonFormat[UUID] = jsonFormat(
+ { (js: JsValue) =>
+ js match {
+ case JsString(str) => UUID.fromString(str)
+ case other => deserializationError("expected string as UUID")
+ }
+ }, { (uuid: UUID) =>
+ JsString(uuid.toString)
+ }
+ )
+
+ private val timeFormatter = DateTimeFormatter
+ .ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX")
+ .withZone(ZoneId.of("UTC"))
+
+ implicit def instantFormat: JsonFormat[Instant] = jsonFormat(
+ { (js: JsValue) =>
+ js match {
+ case JsString(str) => Instant.parse(str)
+ case other => deserializationError(s"`$other` is not a valid instant")
+ }
+ }, { (instant: Instant) =>
+ JsString(timeFormatter.format(instant))
+ }
+ )
+ implicit def spanFormat: RootJsonFormat[Span] = jsonFormat7(Span.apply)
+ }
+
+}
diff --git a/src/main/scala/NoTracer.scala b/src/main/scala/NoTracer.scala
new file mode 100644
index 0000000..904f28f
--- /dev/null
+++ b/src/main/scala/NoTracer.scala
@@ -0,0 +1,5 @@
+package xyz.driver.tracing
+
+object NoTracer extends Tracer {
+ override def submit(span: Span): Unit = ()
+}