aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/tracing/TracingDirectives.scala
diff options
context:
space:
mode:
authorJakob Odersky <jakob@driver.xyz>2017-10-01 20:24:02 -0700
committerJakob Odersky <jakob@driver.xyz>2017-10-01 20:24:29 -0700
commit2c08b51411be5b0cce57f876377fcd52bee99990 (patch)
treefee56a21e6a5f3d2dd459b51e5afb355db6c7f02 /src/main/scala/xyz/driver/tracing/TracingDirectives.scala
parent5bd947dd08eec1d6c64a9549566f3ce0e91fe74f (diff)
downloadtracing-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.scala90
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))
- }
-
-}