Skip to content

Commit

Permalink
Merge pull request #549 from embrace-io/create-payload-module
Browse files Browse the repository at this point in the history
Create payload module
  • Loading branch information
fractalwrench committed Mar 12, 2024
2 parents 220a05a + 84ff699 commit a82f2c5
Show file tree
Hide file tree
Showing 6 changed files with 106 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import io.embrace.android.embracesdk.internal.utils.DataSourceModuleSupplier
import io.embrace.android.embracesdk.internal.utils.DeliveryModuleSupplier
import io.embrace.android.embracesdk.internal.utils.EssentialServiceModuleSupplier
import io.embrace.android.embracesdk.internal.utils.NativeModuleSupplier
import io.embrace.android.embracesdk.internal.utils.PayloadModuleSupplier
import io.embrace.android.embracesdk.internal.utils.Provider
import io.embrace.android.embracesdk.internal.utils.SdkObservabilityModuleSupplier
import io.embrace.android.embracesdk.internal.utils.SessionModuleSupplier
Expand Down Expand Up @@ -61,6 +62,7 @@ internal class ModuleInitBootstrapper(
private val dataSourceModuleSupplier: DataSourceModuleSupplier = ::DataSourceModuleImpl,
private val sessionModuleSupplier: SessionModuleSupplier = ::SessionModuleImpl,
private val crashModuleSupplier: CrashModuleSupplier = ::CrashModuleImpl,
private val payloadModuleSupplier: PayloadModuleSupplier = ::PayloadModuleImpl,
) {
lateinit var coreModule: CoreModule
private set
Expand Down Expand Up @@ -110,6 +112,9 @@ internal class ModuleInitBootstrapper(
lateinit var crashModule: CrashModule
private set

lateinit var payloadModule: PayloadModule
private set

private val asyncInitTask = AtomicReference<Future<*>?>(null)

/**
Expand Down Expand Up @@ -421,6 +426,15 @@ internal class ModuleInitBootstrapper(
)
}

payloadModule = init(PayloadModule::class) {
payloadModuleSupplier(
essentialServiceModule,
nativeModule,
openTelemetryModule,
sdkObservabilityModule
)
}

postInit(CrashModule::class) {
Thread.setDefaultUncaughtExceptionHandler(crashModule.automaticVerificationExceptionHandler)
serviceRegistry.registerService(crashModule.crashService)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package io.embrace.android.embracesdk.injection

import io.embrace.android.embracesdk.capture.envelope.LogEnvelopeSource
import io.embrace.android.embracesdk.capture.envelope.SessionEnvelopeSource
import io.embrace.android.embracesdk.capture.envelope.log.LogSourceImpl
import io.embrace.android.embracesdk.capture.envelope.metadata.EnvelopeMetadataSourceImpl
import io.embrace.android.embracesdk.capture.envelope.resource.EnvelopeResourceSourceImpl
import io.embrace.android.embracesdk.capture.envelope.session.SessionPayloadSourceImpl
import io.embrace.android.embracesdk.ndk.NativeModule

/**
* Modules containing classes that generate the payloads.
*/
internal interface PayloadModule {
val sessionEnvelopeSource: SessionEnvelopeSource
val logEnvelopeSource: LogEnvelopeSource
}

internal class PayloadModuleImpl(
private val essentialServiceModule: EssentialServiceModule,
private val nativeModule: NativeModule,
private val otelModule: OpenTelemetryModule,
private val sdkObservabilityModule: SdkObservabilityModule
) : PayloadModule {

private val metadataSource by singleton {
EnvelopeMetadataSourceImpl(essentialServiceModule.userService)
}

private val resourceSource by singleton {
EnvelopeResourceSourceImpl()
}

private val sessionPayloadSource by singleton {
SessionPayloadSourceImpl(
sdkObservabilityModule.internalErrorService,
nativeModule.nativeThreadSamplerService,
otelModule.spanSink,
otelModule.currentSessionSpan
)
}

private val logSource by singleton {
LogSourceImpl()
}

override val sessionEnvelopeSource: SessionEnvelopeSource by singleton {
SessionEnvelopeSource(metadataSource, resourceSource, sessionPayloadSource)
}

override val logEnvelopeSource: LogEnvelopeSource by singleton {
LogEnvelopeSource(metadataSource, resourceSource, logSource)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import io.embrace.android.embracesdk.injection.DeliveryModule
import io.embrace.android.embracesdk.injection.EssentialServiceModule
import io.embrace.android.embracesdk.injection.InitModule
import io.embrace.android.embracesdk.injection.OpenTelemetryModule
import io.embrace.android.embracesdk.injection.PayloadModule
import io.embrace.android.embracesdk.injection.SdkObservabilityModule
import io.embrace.android.embracesdk.injection.SessionModule
import io.embrace.android.embracesdk.injection.StorageModule
Expand Down Expand Up @@ -228,6 +229,16 @@ internal typealias CrashModuleSupplier = (
androidServicesModule: AndroidServicesModule
) -> CrashModule

/**
* Function that returns an instance of [PayloadModule]. Matches the signature of the constructor for [PayloadModuleImpl]
*/
internal typealias PayloadModuleSupplier = (
essentialServiceModule: EssentialServiceModule,
nativeModule: NativeModule,
otelModule: OpenTelemetryModule,
sdkObservabilityModule: SdkObservabilityModule
) -> PayloadModule

/**
* Function that returns an instance of T meant to represent a provider/supplier that does not require any input parameters
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,19 @@ import io.embrace.android.embracesdk.internal.spans.InternalTracer
import io.embrace.android.embracesdk.internal.spans.SpanRepository
import io.embrace.android.embracesdk.internal.spans.SpanService
import io.embrace.android.embracesdk.internal.spans.SpanSink
import io.embrace.android.embracesdk.internal.spans.SpanSinkImpl
import io.embrace.android.embracesdk.opentelemetry.OpenTelemetryConfiguration
import io.opentelemetry.api.logs.Logger
import io.opentelemetry.api.trace.Tracer

internal class FakeOpenTelemetryModule(
override val currentSessionSpan: CurrentSessionSpan = FakeCurrentSessionSpan()
override val currentSessionSpan: CurrentSessionSpan = FakeCurrentSessionSpan(),
override val spanSink: SpanSink = SpanSinkImpl()
) : OpenTelemetryModule {
override val openTelemetryConfiguration: OpenTelemetryConfiguration
get() = TODO()
override val spanRepository: SpanRepository
get() = TODO()
override val spanSink: SpanSink
get() = TODO()
override val tracer: Tracer
get() = TODO()
override val spanService: SpanService
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ internal class ModuleInitBootstrapperTest {
assertTrue(essentialServiceModule is EssentialServiceModuleImpl)
assertTrue(dataCaptureServiceModule is DataCaptureServiceModuleImpl)
assertTrue(deliveryModule is DeliveryModuleImpl)
assertTrue(payloadModule is PayloadModuleImpl)
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package io.embrace.android.embracesdk.injection

import io.embrace.android.embracesdk.fakes.FakeOpenTelemetryModule
import io.embrace.android.embracesdk.fakes.injection.FakeEssentialServiceModule
import io.embrace.android.embracesdk.fakes.injection.FakeNativeModule
import io.embrace.android.embracesdk.fakes.injection.FakeSdkObservabilityModule
import org.junit.Assert.assertNotNull
import org.junit.Test

internal class PayloadModuleImplTest {

@Test
fun `module default values`() {
val module = PayloadModuleImpl(
FakeEssentialServiceModule(),
FakeNativeModule(),
FakeOpenTelemetryModule(),
FakeSdkObservabilityModule()
)
assertNotNull(module.sessionEnvelopeSource)
assertNotNull(module.logEnvelopeSource)
}
}

0 comments on commit a82f2c5

Please sign in to comment.