blob: 9d470ad08917a8c343d40423302b38150d17249e (
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 scala.util.Try
/** Encapsulates 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(traceId: String, spanId: String) extends ModeledCustomHeader[Traceparent] {
override def renderInRequests = true
override def renderInResponses = true
override val companion: Traceparent.type = Traceparent
override def value: String = f"01-$traceId-$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(
traceId,
spanId
)
}
}
|