@@ -11,6 +11,7 @@ import io.opentelemetry.api.metrics.Meter
1111import io.opentelemetry.api.trace.Span
1212import io.opentelemetry.api.trace.Tracer
1313import io.opentelemetry.context.Context
14+ import io.opentelemetry.instrumentation.api.instrumenter.LocalRootSpan
1415import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute
1516import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource
1617import java.io.Closeable
@@ -30,6 +31,7 @@ class OpenTelemetryTracer : TracerEngine, ThreadContextManager<Span> {
3031 }
3132
3233 override fun setOperationName (name : String ) {
34+ currentSpan().updateName(name)
3335 HttpServerRoute .update(
3436 Context .current(),
3537 HttpServerRouteSource .CONTROLLER ,
@@ -39,27 +41,27 @@ class OpenTelemetryTracer : TracerEngine, ThreadContextManager<Span> {
3941 }
4042
4143 override fun addProperty (key : String , value : String? ) {
42- Span .current()? .addProperty(key, value)
44+ currentSpan() .addProperty(key, value)
4345 }
4446
4547 override fun addRootProperty (key : String , value : String? ) {
46- currentSpan()? .addProperty(key, value)
48+ rootSpan() .addProperty(key, value)
4749 }
4850
4951 override fun addProperty (key : String , value : Number ? ) {
50- Span .current()? .addProperty(key, value)
52+ currentSpan() .addProperty(key, value)
5153 }
5254
5355 override fun addRootProperty (key : String , value : Number ? ) {
54- currentSpan()? .addProperty(key, value)
56+ rootSpan() .addProperty(key, value)
5557 }
5658
5759 override fun addProperty (key : String , value : Boolean? ) {
58- Span .current()? .addProperty(key, value)
60+ currentSpan() .addProperty(key, value)
5961 }
6062
6163 override fun addRootProperty (key : String , value : Boolean? ) {
62- currentSpan()? .addProperty(key, value)
64+ rootSpan() .addProperty(key, value)
6365 }
6466
6567 override fun addProperty (key : String , value : List <* >) {
@@ -90,27 +92,19 @@ class OpenTelemetryTracer : TracerEngine, ThreadContextManager<Span> {
9092 }
9193
9294 override fun notifyError (exception : Throwable , expected : Boolean ) {
93- Span .current()?.let { span ->
94- OpenTelemetryUtils .notifyError(span, exception, expected)
95- }
95+ OpenTelemetryUtils .notifyError(currentSpan(), exception, expected)
9696 }
9797
9898 override fun notifyRootError (exception : Throwable , expected : Boolean ) {
99- currentSpan()?.let { span ->
100- OpenTelemetryUtils .notifyError(span, exception, expected)
101- }
99+ OpenTelemetryUtils .notifyError(rootSpan(), exception, expected)
102100 }
103101
104102 override fun notifyError (message : String , params : Map <String , String ?>, expected : Boolean ) {
105- Span .current()?.let { span ->
106- OpenTelemetryUtils .notifyError(span, message, params, expected)
107- }
103+ OpenTelemetryUtils .notifyError(currentSpan(), message, params, expected)
108104 }
109105
110106 override fun notifyRootError (message : String , params : Map <String , String ?>, expected : Boolean ) {
111- currentSpan()?.let { span ->
112- OpenTelemetryUtils .notifyError(span, message, params, expected)
113- }
107+ OpenTelemetryUtils .notifyError(rootSpan(), message, params, expected)
114108 }
115109
116110 override fun clear () {}
@@ -146,7 +140,12 @@ class OpenTelemetryTracer : TracerEngine, ThreadContextManager<Span> {
146140 else -> resolveByPrimitiveTypeRepresentationOnJvm(tClass, k)
147141 }
148142
149- private fun currentSpan (): Span ? = Span .current()
143+ private fun currentSpan (): Span = Span .current()
144+
145+ private fun rootSpan (): Span {
146+ val root = LocalRootSpan .current().takeIf { it != Span .getInvalid() }
147+ return root ? : Span .current()
148+ }
150149
151150 private class Setter <T , R : Any >(private val key : AttributeKey <R >, private val transformer : (T ) -> R ) {
152151 fun setAttributeIn (span : Span , value : T ) {
0 commit comments