blob: 866476db9fb70ca60867d4d16e89b41fb590dc41 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
package xyz.driver.core
package rest
package headers
import akka.http.scaladsl.model.headers.{ModeledCustomHeader, ModeledCustomHeaderCompanion}
import xyz.driver.core.reporting.SpanContext
import scala.util.Try
/** Encapsulates a trace context in an HTTP header for propagation across services.
*
* This implementation corresponds to the W3C editor's draft specification (as of 2018-08-28)
* https://w3c.github.io/distributed-tracing/report-trace-context.html. The 'flags' field is
* ignored.
*/
final case class Traceparent(spanContext: SpanContext) extends ModeledCustomHeader[Traceparent] {
override def renderInRequests = true
override def renderInResponses = true
override val companion: Traceparent.type = Traceparent
override def value: String = f"01-${spanContext.traceId}-${spanContext.spanId}-00"
}
object Traceparent extends ModeledCustomHeaderCompanion[Traceparent] {
override val name = "traceparent"
override def parse(value: String) = Try {
val Array(version, traceId, spanId, _) = value.split("-")
require(
version == "01",
s"Found unsupported version '$version' in traceparent header. Only version '01' is supported.")
new Traceparent(
new SpanContext(traceId, spanId)
)
}
}
|