Skip to content

Commit a3fc7ef

Browse files
authored
Merge pull request #685 from tpolecat/pr/673
Allow non-uuid trace ids from kernel
2 parents 71b8367 + ba5fae7 commit a3fc7ef

File tree

2 files changed

+37
-18
lines changed

2 files changed

+37
-18
lines changed

modules/log/shared/src/main/scala/LogSpan.scala

+18-18
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,18 @@ import java.net.URI
2727
private[log] final case class LogSpan[F[_]: Sync: Logger](
2828
service: String,
2929
name: String,
30-
sid: UUID,
31-
parent: Option[Either[UUID, LogSpan[F]]],
30+
sid: String,
31+
parent: Option[Either[String, LogSpan[F]]],
3232
parentKernel: Option[Kernel],
33-
traceUUID: UUID,
33+
traceID: String,
3434
timestamp: Instant,
3535
fields: Ref[F, Map[String, Json]],
3636
children: Ref[F, List[JsonObject]],
3737
spanCreationPolicy: Span.Options.SpanCreationPolicy
3838
) extends Span.Default[F] {
3939
import LogSpan._
4040

41-
def parentId: Option[UUID] =
41+
def parentId: Option[String] =
4242
parent.map(_.fold(identity, _.sid))
4343

4444
def get(key: String): F[Option[Json]] =
@@ -47,8 +47,8 @@ private[log] final case class LogSpan[F[_]: Sync: Logger](
4747
def kernel: F[Kernel] =
4848
Kernel(
4949
Map(
50-
Headers.TraceId -> traceUUID.toString,
51-
Headers.SpanId -> sid.toString
50+
Headers.TraceId -> traceID,
51+
Headers.SpanId -> sid
5252
)
5353
).pure[F]
5454

@@ -90,18 +90,18 @@ private[log] final case class LogSpan[F[_]: Sync: Logger](
9090
"duration_ms" -> (finish.toEpochMilli - timestamp.toEpochMilli).asJson,
9191
"trace.span_id" -> sid.asJson,
9292
"trace.parent_id" -> parentId.asJson,
93-
"trace.trace_id" -> traceUUID.asJson
93+
"trace.trace_id" -> traceID.asJson
9494
) ++ fs ++ List("children" -> cs.reverse.map(Json.fromJsonObject).asJson)
9595

9696
JsonObject.fromIterable(fields)
9797

9898
}
9999

100100
def traceId: F[Option[String]] =
101-
traceUUID.toString.some.pure[F]
101+
traceID.some.pure[F]
102102

103103
def spanId: F[Option[String]] =
104-
sid.toString.some.pure[F]
104+
sid.some.pure[F]
105105

106106
def traceUri: F[Option[URI]] = none.pure[F]
107107
}
@@ -173,10 +173,10 @@ private[log] object LogSpan {
173173
} yield LogSpan(
174174
service = parent.service,
175175
name = name,
176-
sid = spanId,
176+
sid = spanId.toString,
177177
parent = Some(Right(parent)),
178178
parentKernel = options.parentKernel,
179-
traceUUID = parent.traceUUID,
179+
traceID = parent.traceID,
180180
timestamp = timestamp,
181181
fields = fields,
182182
children = children,
@@ -189,17 +189,17 @@ private[log] object LogSpan {
189189
): F[LogSpan[F]] =
190190
for {
191191
spanId <- uuid[F]
192-
traceUUID <- uuid[F]
192+
traceID <- uuid[F]
193193
timestamp <- now[F]
194194
fields <- Ref[F].of(Map.empty[String, Json])
195195
children <- Ref[F].of(List.empty[JsonObject])
196196
} yield LogSpan(
197197
service = service,
198198
name = name,
199-
sid = spanId,
199+
sid = spanId.toString,
200200
parent = None,
201201
parentKernel = None,
202-
traceUUID = traceUUID,
202+
traceID = traceID.toString,
203203
timestamp = timestamp,
204204
fields = fields,
205205
children = children,
@@ -212,19 +212,19 @@ private[log] object LogSpan {
212212
kernel: Kernel
213213
): F[LogSpan[F]] =
214214
for {
215-
traceUUID <- Sync[F].catchNonFatal(UUID.fromString(kernel.toHeaders(Headers.TraceId)))
216-
parentId <- Sync[F].catchNonFatal(UUID.fromString(kernel.toHeaders(Headers.SpanId)))
215+
traceID <- Sync[F].catchNonFatal(kernel.toHeaders(Headers.TraceId))
216+
parentId <- Sync[F].catchNonFatal(kernel.toHeaders(Headers.SpanId))
217217
spanId <- uuid[F]
218218
timestamp <- now[F]
219219
fields <- Ref[F].of(Map.empty[String, Json])
220220
children <- Ref[F].of(List.empty[JsonObject])
221221
} yield LogSpan(
222222
service = service,
223223
name = name,
224-
sid = spanId,
224+
sid = spanId.toString,
225225
parent = Some(Left(parentId)),
226226
parentKernel = None,
227-
traceUUID = traceUUID,
227+
traceID = traceID,
228228
timestamp = timestamp,
229229
fields = fields,
230230
children = children,

modules/log/shared/src/test/scala/LogSuite.scala

+19
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,23 @@ class LogSuite extends CatsEffectSuite {
6161
}
6262
}
6363

64+
test("continueOrElseRoot should preserve non-uuid trace from kernel") {
65+
MockLogger.newInstance[IO]("test").flatMap { implicit log =>
66+
val kernel = Kernel(
67+
Map(
68+
LogSpan.Headers.TraceId -> "non-uuid-trace-id",
69+
LogSpan.Headers.SpanId -> "non-uuid-parent-span-id"
70+
)
71+
)
72+
val traceId = Log
73+
.entryPoint[IO]("service", filter(_).spaces2)
74+
.continueOrElseRoot("root span", kernel)
75+
.use { root =>
76+
root.traceId
77+
}
78+
79+
assertIO(traceId, Some("non-uuid-trace-id"))
80+
}
81+
}
82+
6483
}

0 commit comments

Comments
 (0)