diff options
author | Jakob Odersky <jakob@driver.xyz> | 2017-10-01 20:24:02 -0700 |
---|---|---|
committer | Jakob Odersky <jakob@driver.xyz> | 2017-10-01 20:24:29 -0700 |
commit | 2c08b51411be5b0cce57f876377fcd52bee99990 (patch) | |
tree | fee56a21e6a5f3d2dd459b51e5afb355db6c7f02 /src/main/scala/xyz/driver/tracing/TracingDirectives.scala | |
parent | 5bd947dd08eec1d6c64a9549566f3ce0e91fe74f (diff) | |
download | tracing-2c08b51411be5b0cce57f876377fcd52bee99990.tar.gz tracing-2c08b51411be5b0cce57f876377fcd52bee99990.tar.bz2 tracing-2c08b51411be5b0cce57f876377fcd52bee99990.zip |
Flatten file hierarchy and implement OAUTH2 authentication
Diffstat (limited to 'src/main/scala/xyz/driver/tracing/TracingDirectives.scala')
-rw-r--r-- | src/main/scala/xyz/driver/tracing/TracingDirectives.scala | 90 |
1 files changed, 0 insertions, 90 deletions
diff --git a/src/main/scala/xyz/driver/tracing/TracingDirectives.scala b/src/main/scala/xyz/driver/tracing/TracingDirectives.scala deleted file mode 100644 index 9e0237c..0000000 --- a/src/main/scala/xyz/driver/tracing/TracingDirectives.scala +++ /dev/null @@ -1,90 +0,0 @@ -package xyz.driver.tracing - -import akka.http.scaladsl.model._ -import akka.http.scaladsl.model.headers._ -import akka.http.scaladsl.server._ -import akka.http.scaladsl.server.Directives._ -import java.util.UUID -import scala.util.Random -import java.time._ -import scala.concurrent._ -import scala.collection.immutable.Seq - -trait TracingDirectives { - import TracingDirectives._ - - def optionalTraceContext: Directive1[Option[TraceContext]] = - extractRequest.map { req => - TraceContext.fromHeaders(req.headers) - } - - def withTraceContext(ctx: TraceContext): Directive0 = - mapRequest(req => req.withHeaders(ctx.headers)) - - def trace(name: String, labels: Map[String, String] = Map.empty)( - implicit tracer: Tracer): Directive0 = - optionalTraceContext.flatMap { - case parent => - val span: Span = parent match { - case None => // no parent span, create new trace - Span( - traceId = UUID.randomUUID, - spanId = UUID.randomUUID, - name = name, - labels = labels - ) - case Some(TraceContext(traceId, parentSpanId)) => - Span( - traceId = traceId, - spanId = UUID.randomUUID, - parentSpanId = parentSpanId, - name = name, - labels = labels - ) - } - - withTraceContext(TraceContext.fromSpan(span)) & mapRouteResult { res => - tracer.submit(span.end()) - res - } - } - - /* - def span2(name2: String, tracer: Tracer): Directive0 = { - val f: RouteResult ⇒ RouteResult = ??? - Directive { inner ⇒ ctx ⇒ - inner(())(ctx).map(f)(ctx.executionContext) - } - } - */ - -} - -object TracingDirectives { - - case class TraceContext(traceId: UUID, parentSpanId: Option[UUID]) { - import TraceContext._ - - def headers: Seq[HttpHeader] = - Seq(RawHeader(TraceHeaderName, traceId.toString)) ++ - parentSpanId.toSeq.map(id => RawHeader(SpanHeaderName, id.toString)) - } - object TraceContext { - val TraceHeaderName = "Tracing-Trace-Id" - val SpanHeaderName = "Tracing-Span-Id" - - def fromHeaders(headers: Seq[HttpHeader]): Option[TraceContext] = { - val traceId = headers - .find(_.name == TraceHeaderName) - .map(_.value) - .map(UUID.fromString) - val parentSpanId = - headers.find(_.name == SpanHeaderName).map(_.value).map(UUID.fromString) - traceId.map { tid => - TraceContext(tid, parentSpanId) - } - } - def fromSpan(span: Span) = TraceContext(span.traceId, Some(span.spanId)) - } - -} |