Skip to content

Commit 591e1ba

Browse files
Merge pull request #2405 from embrace-io/combine-span-creator
Combine span creator with span start args
2 parents 838a8e3 + b9b1033 commit 591e1ba

File tree

24 files changed

+240
-323
lines changed

24 files changed

+240
-323
lines changed

embrace-android-core/src/main/kotlin/io/embrace/android/embracesdk/internal/injection/OpenTelemetryModuleImpl.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@ internal class OpenTelemetryModuleImpl(
9090

9191
private val embraceSpanFactory: EmbraceSpanFactory by singleton {
9292
EmbraceSpanFactoryImpl(
93-
tracer = otelSdkWrapper.sdkTracer,
9493
openTelemetryClock = openTelemetryClock,
9594
spanRepository = spanRepository,
9695
dataValidator = dataValidator,
@@ -105,7 +104,8 @@ internal class OpenTelemetryModuleImpl(
105104
telemetryService = initModule.telemetryService,
106105
spanRepository = spanRepository,
107106
spanSink = spanSink,
108-
embraceSpanFactorySupplier = { embraceSpanFactory }
107+
tracerSupplier = { otelSdkWrapper.sdkTracer },
108+
embraceSpanFactorySupplier = { embraceSpanFactory },
109109
).also {
110110
internalSpanStopCallback = it::spanStopCallback
111111
}
@@ -116,8 +116,10 @@ internal class OpenTelemetryModuleImpl(
116116
spanRepository = spanRepository,
117117
canStartNewSpan = currentSessionSpan::canStartNewSpan,
118118
initCallback = currentSessionSpan::initializeService,
119-
dataValidator = dataValidator
120-
) { embraceSpanFactory }
119+
dataValidator = dataValidator,
120+
tracerSupplier = { otelSdkWrapper.sdkTracer },
121+
embraceSpanFactorySupplier = { embraceSpanFactory },
122+
)
121123
}
122124

123125
override val embraceTracer: EmbraceTracer by singleton {

embrace-android-core/src/main/kotlin/io/embrace/android/embracesdk/internal/spans/CurrentSessionSpanImpl.kt

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import io.embrace.android.embracesdk.internal.otel.sdk.toEmbraceObjectName
1212
import io.embrace.android.embracesdk.internal.otel.spans.EmbraceSdkSpan
1313
import io.embrace.android.embracesdk.internal.otel.spans.EmbraceSpanData
1414
import io.embrace.android.embracesdk.internal.otel.spans.EmbraceSpanFactory
15+
import io.embrace.android.embracesdk.internal.otel.spans.OtelSpanStartArgs
1516
import io.embrace.android.embracesdk.internal.otel.spans.SpanRepository
1617
import io.embrace.android.embracesdk.internal.otel.spans.SpanSink
1718
import io.embrace.android.embracesdk.internal.otel.toOtelKotlin
@@ -22,6 +23,7 @@ import io.embrace.android.embracesdk.spans.EmbraceSpan
2223
import io.embrace.android.embracesdk.spans.ErrorCode
2324
import io.embrace.opentelemetry.kotlin.Clock
2425
import io.embrace.opentelemetry.kotlin.ExperimentalApi
26+
import io.embrace.opentelemetry.kotlin.tracing.Tracer
2527
import io.opentelemetry.semconv.incubating.SessionIncubatingAttributes
2628
import java.util.concurrent.atomic.AtomicBoolean
2729
import java.util.concurrent.atomic.AtomicInteger
@@ -33,6 +35,7 @@ internal class CurrentSessionSpanImpl(
3335
private val telemetryService: TelemetryService,
3436
private val spanRepository: SpanRepository,
3537
private val spanSink: SpanSink,
38+
private val tracerSupplier: Provider<Tracer>,
3639
private val embraceSpanFactorySupplier: Provider<EmbraceSpanFactory>,
3740
) : CurrentSessionSpan, SessionSpanWriter {
3841

@@ -206,10 +209,13 @@ internal class CurrentSessionSpanImpl(
206209
internalTraceCount.set(0)
207210

208211
return embraceSpanFactorySupplier().create(
209-
name = "session",
210-
type = EmbType.Ux.Session,
211-
internal = true,
212-
private = false,
212+
OtelSpanStartArgs(
213+
name = "session",
214+
type = EmbType.Ux.Session,
215+
internal = true,
216+
private = false,
217+
tracer = tracerSupplier()
218+
)
213219
).apply {
214220
start(startTimeMs = startTimeMs)
215221
setSystemAttribute(SessionIncubatingAttributes.SESSION_ID.key, Uuid.getEmbUuid())

embrace-android-core/src/test/java/io/embrace/android/embracesdk/internal/spans/CurrentSessionSpanImplTests.kt

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import io.embrace.android.embracesdk.assertions.validateSystemLink
1010
import io.embrace.android.embracesdk.fakes.FakeClock
1111
import io.embrace.android.embracesdk.fakes.FakeEmbraceSdkSpan
1212
import io.embrace.android.embracesdk.fakes.FakeEmbraceSpanFactory
13+
import io.embrace.android.embracesdk.fakes.FakeTracer
1314
import io.embrace.android.embracesdk.fakes.injection.FakeInitModule
1415
import io.embrace.android.embracesdk.internal.arch.destination.SpanAttributeData
1516
import io.embrace.android.embracesdk.internal.arch.schema.SchemaType
@@ -22,7 +23,7 @@ import io.embrace.android.embracesdk.internal.otel.schema.AppTerminationCause
2223
import io.embrace.android.embracesdk.internal.otel.schema.EmbType
2324
import io.embrace.android.embracesdk.internal.otel.schema.LinkType
2425
import io.embrace.android.embracesdk.internal.otel.sdk.id.OtelIds
25-
import io.embrace.android.embracesdk.internal.otel.sdk.otelSpanCreator
26+
import io.embrace.android.embracesdk.internal.otel.spans.OtelSpanStartArgs
2627
import io.embrace.android.embracesdk.internal.otel.spans.SpanRepository
2728
import io.embrace.android.embracesdk.internal.otel.spans.SpanService
2829
import io.embrace.android.embracesdk.internal.otel.spans.SpanSink
@@ -153,35 +154,38 @@ internal class CurrentSessionSpanImplTests {
153154
repeat(MAX_NON_INTERNAL_SPANS_PER_SESSION) {
154155
assertNotNull(
155156
spanService.createSpan(
156-
otelSpanCreator = tracer.otelSpanCreator(
157+
otelSpanStartArgs = OtelSpanStartArgs(
157158
name = "external-span",
158159
type = EmbType.Performance.Default,
159-
parent = null,
160160
internal = false,
161161
private = false,
162+
tracer = tracer,
163+
parentSpan = null,
162164
)
163165
)
164166
)
165167
}
166168
assertNull(
167169
spanService.createSpan(
168-
otelSpanCreator = tracer.otelSpanCreator(
170+
otelSpanStartArgs = OtelSpanStartArgs(
169171
name = "external-span",
170172
type = EmbType.Performance.Default,
171-
parent = null,
172173
internal = false,
173174
private = false,
175+
tracer = tracer,
176+
parentSpan = null,
174177
)
175178
)
176179
)
177180
assertNotNull(
178181
spanService.createSpan(
179-
otelSpanCreator = tracer.otelSpanCreator(
182+
otelSpanStartArgs = OtelSpanStartArgs(
180183
name = "internal-span",
181184
type = EmbType.Performance.Default,
182-
parent = null,
183185
internal = true,
184186
private = false,
187+
tracer = tracer,
188+
parentSpan = null,
185189
)
186190
)
187191
)
@@ -475,7 +479,8 @@ internal class CurrentSessionSpanImplTests {
475479
telemetryService = telemetryService,
476480
spanRepository = spanRepository,
477481
spanSink = spanSink,
478-
embraceSpanFactorySupplier = { FakeEmbraceSpanFactory() }
482+
embraceSpanFactorySupplier = { FakeEmbraceSpanFactory() },
483+
tracerSupplier = { FakeTracer() }
479484
)
480485
assertFalse(sessionSpan.readySession())
481486
}

embrace-android-otel/src/main/kotlin/io/embrace/android/embracesdk/internal/otel/impl/EmbOtelJavaSpanBuilder.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package io.embrace.android.embracesdk.internal.otel.impl
22

3-
import io.embrace.android.embracesdk.internal.otel.spans.OtelSpanCreator
3+
import io.embrace.android.embracesdk.internal.otel.spans.OtelSpanStartArgs
44
import io.embrace.android.embracesdk.internal.otel.spans.SpanService
55
import io.embrace.opentelemetry.kotlin.Clock
66
import io.embrace.opentelemetry.kotlin.ExperimentalApi
@@ -15,13 +15,11 @@ import java.util.concurrent.TimeUnit
1515

1616
@OptIn(ExperimentalApi::class)
1717
class EmbOtelJavaSpanBuilder(
18-
private val otelSpanCreator: OtelSpanCreator,
18+
private val otelSpanStartArgs: OtelSpanStartArgs,
1919
private val spanService: SpanService,
2020
private val clock: Clock,
2121
) : OtelJavaSpanBuilder {
2222

23-
private val otelSpanStartArgs = otelSpanCreator.spanStartArgs
24-
2523
override fun setParent(context: OtelJavaContext): OtelJavaSpanBuilder {
2624
otelSpanStartArgs.parentContext = context
2725
return this
@@ -61,7 +59,7 @@ class EmbOtelJavaSpanBuilder(
6159
}
6260

6361
override fun startSpan(): OtelJavaSpan {
64-
spanService.createSpan(otelSpanCreator)?.let { embraceSpan ->
62+
spanService.createSpan(otelSpanStartArgs)?.let { embraceSpan ->
6563
if (embraceSpan.start()) {
6664
return EmbOtelJavaSpan(
6765
embraceSpan = embraceSpan,

embrace-android-otel/src/main/kotlin/io/embrace/android/embracesdk/internal/otel/impl/EmbOtelJavaTracer.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.embrace.android.embracesdk.internal.otel.impl
22

33
import io.embrace.android.embracesdk.internal.otel.schema.EmbType
4-
import io.embrace.android.embracesdk.internal.otel.sdk.otelSpanCreator
4+
import io.embrace.android.embracesdk.internal.otel.spans.OtelSpanStartArgs
55
import io.embrace.android.embracesdk.internal.otel.spans.SpanService
66
import io.embrace.android.embracesdk.internal.otel.spans.getEmbraceSpan
77
import io.embrace.opentelemetry.kotlin.Clock
@@ -20,12 +20,13 @@ class EmbOtelJavaTracer(
2020

2121
override fun spanBuilder(spanName: String): OtelJavaSpanBuilder =
2222
EmbOtelJavaSpanBuilder(
23-
otelSpanCreator = sdkTracer.otelSpanCreator(
23+
otelSpanStartArgs = OtelSpanStartArgs(
2424
name = spanName,
2525
type = EmbType.Performance.Default,
26-
private = false,
2726
internal = false,
28-
parent = OtelJavaContext.current().getEmbraceSpan(),
27+
private = false,
28+
tracer = sdkTracer,
29+
parentSpan = OtelJavaContext.current().getEmbraceSpan(),
2930
),
3031
spanService = spanService,
3132
clock = clock,

embrace-android-otel/src/main/kotlin/io/embrace/android/embracesdk/internal/otel/impl/EmbTracer.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.embrace.android.embracesdk.internal.otel.impl
22

33
import io.embrace.android.embracesdk.internal.otel.schema.EmbType
4-
import io.embrace.android.embracesdk.internal.otel.sdk.otelSpanCreator
4+
import io.embrace.android.embracesdk.internal.otel.spans.OtelSpanStartArgs
55
import io.embrace.android.embracesdk.internal.otel.spans.SpanService
66
import io.embrace.android.embracesdk.internal.otel.spans.getEmbraceSpan
77
import io.embrace.opentelemetry.kotlin.Clock
@@ -30,12 +30,13 @@ class EmbTracer(
3030
startTimestamp: Long?,
3131
action: SpanRelationships.() -> Unit,
3232
): Span {
33-
val spanCreator = impl.otelSpanCreator(
33+
val spanCreator = OtelSpanStartArgs(
3434
name = name,
3535
type = EmbType.Performance.Default,
36-
private = false,
3736
internal = false,
38-
parent = OtelJavaContext.current().getEmbraceSpan(),
37+
private = false,
38+
tracer = impl,
39+
parentSpan = OtelJavaContext.current().getEmbraceSpan(),
3940
)
4041

4142
spanService.createSpan(spanCreator)?.let { embraceSpan ->

embrace-android-otel/src/main/kotlin/io/embrace/android/embracesdk/internal/otel/sdk/TracerExt.kt

Lines changed: 0 additions & 32 deletions
This file was deleted.
Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,9 @@
11
package io.embrace.android.embracesdk.internal.otel.spans
22

3-
import io.embrace.android.embracesdk.internal.otel.schema.EmbType
4-
import io.embrace.android.embracesdk.spans.AutoTerminationMode
5-
import io.embrace.android.embracesdk.spans.EmbraceSpan
6-
73
/**
84
* Creates instances of [EmbraceSdkSpan] for internal usage. Using this factory is preferred to invoking the constructor
95
* because of the it requires several services that may not be easily available.
106
*/
117
interface EmbraceSpanFactory {
12-
fun create(
13-
name: String,
14-
type: EmbType,
15-
internal: Boolean,
16-
private: Boolean,
17-
parent: EmbraceSpan? = null,
18-
autoTerminationMode: AutoTerminationMode = AutoTerminationMode.NONE
19-
): EmbraceSdkSpan
20-
21-
fun create(
22-
otelSpanCreator: OtelSpanCreator,
23-
autoTerminationMode: AutoTerminationMode = AutoTerminationMode.NONE
24-
): EmbraceSdkSpan
8+
fun create(otelSpanStartArgs: OtelSpanStartArgs): EmbraceSdkSpan
259
}

0 commit comments

Comments
 (0)