From 2bee42177529fee5d03a5696b7a5912ca21fe5a3 Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Wed, 4 Oct 2017 13:49:38 -0700 Subject: Add logging and noop tracers --- src/main/scala/LoggingTracer.scala | 48 ++++++++++++++++++++++++++++++++++++++ src/main/scala/NoTracer.scala | 5 ++++ 2 files changed, 53 insertions(+) create mode 100644 src/main/scala/LoggingTracer.scala create mode 100644 src/main/scala/NoTracer.scala 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 = () +} -- cgit v1.2.3