diff --git a/agent-api/src/main/java/io/opentelemetry/android/OpenTelemetryRum.kt b/agent-api/src/main/java/io/opentelemetry/android/OpenTelemetryRum.kt index d26c80ef1..5c4b4ea7c 100644 --- a/agent-api/src/main/java/io/opentelemetry/android/OpenTelemetryRum.kt +++ b/agent-api/src/main/java/io/opentelemetry/android/OpenTelemetryRum.kt @@ -18,6 +18,10 @@ interface OpenTelemetryRum { */ val openTelemetry: OpenTelemetry + val clock: Clock + + val sessionProvider: SessionProvider + /** * Get the client session ID associated with this instance of the RUM instrumentation library. * Note: this value will change throughout the lifetime of an application instance, so it is diff --git a/agent-api/src/main/java/io/opentelemetry/android/tools/LogRecordFlusher.kt b/agent-api/src/main/java/io/opentelemetry/android/tools/LogRecordFlusher.kt new file mode 100644 index 000000000..5db7d903f --- /dev/null +++ b/agent-api/src/main/java/io/opentelemetry/android/tools/LogRecordFlusher.kt @@ -0,0 +1,12 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.android.tools + +import io.opentelemetry.sdk.common.CompletableResultCode + +interface LogRecordFlusher { + fun flushLogRecords(): CompletableResultCode +} diff --git a/instrumentation/android-instrumentation/src/main/java/io/opentelemetry/android/instrumentation/InstallationContext.kt b/instrumentation/android-instrumentation/src/main/java/io/opentelemetry/android/instrumentation/InstallationContext.kt index ebd66d928..987b0110c 100644 --- a/instrumentation/android-instrumentation/src/main/java/io/opentelemetry/android/instrumentation/InstallationContext.kt +++ b/instrumentation/android-instrumentation/src/main/java/io/opentelemetry/android/instrumentation/InstallationContext.kt @@ -7,15 +7,11 @@ package io.opentelemetry.android.instrumentation import android.app.Application import android.content.Context -import io.opentelemetry.android.session.SessionProvider -import io.opentelemetry.api.OpenTelemetry -import io.opentelemetry.sdk.common.Clock +import io.opentelemetry.android.OpenTelemetryRum class InstallationContext( val context: Context, - val openTelemetry: OpenTelemetry, - val sessionProvider: SessionProvider, - val clock: Clock, + val openTelemetry: OpenTelemetryRum, ) { val application: Application? = context as? Application } diff --git a/instrumentation/crash/src/main/java/io/opentelemetry/android/instrumentation/crash/CrashReporter.kt b/instrumentation/crash/src/main/java/io/opentelemetry/android/instrumentation/crash/CrashReporter.kt index cb272e423..bfead93b9 100644 --- a/instrumentation/crash/src/main/java/io/opentelemetry/android/instrumentation/crash/CrashReporter.kt +++ b/instrumentation/crash/src/main/java/io/opentelemetry/android/instrumentation/crash/CrashReporter.kt @@ -5,11 +5,12 @@ package io.opentelemetry.android.instrumentation.crash +import io.opentelemetry.android.OpenTelemetryRum import io.opentelemetry.android.common.internal.utils.threadIdCompat import io.opentelemetry.android.instrumentation.common.EventAttributesExtractor +import io.opentelemetry.android.tools.LogRecordFlusher import io.opentelemetry.api.common.Attributes import io.opentelemetry.context.Context -import io.opentelemetry.sdk.OpenTelemetrySdk import io.opentelemetry.semconv.ExceptionAttributes.EXCEPTION_MESSAGE import io.opentelemetry.semconv.ExceptionAttributes.EXCEPTION_STACKTRACE import io.opentelemetry.semconv.ExceptionAttributes.EXCEPTION_TYPE @@ -24,7 +25,7 @@ internal class CrashReporter( additionalExtractors.toList() /** Installs the crash reporting instrumentation. */ - fun install(openTelemetry: OpenTelemetrySdk) { + fun install(openTelemetry: OpenTelemetryRum) { val handler = CrashReportingExceptionHandler( crashProcessor = { crashDetails: CrashDetails -> @@ -38,10 +39,13 @@ internal class CrashReporter( } private fun processCrash( - openTelemetry: OpenTelemetrySdk, + openTelemetry: OpenTelemetryRum, crashDetails: CrashDetails, ) { - val logger = openTelemetry.sdkLoggerProvider.loggerBuilder("io.opentelemetry.crash").build() + val logger = + openTelemetry.openTelemetry.logsBridge + .loggerBuilder("io.opentelemetry.crash") + .build() val throwable = crashDetails.cause val thread = crashDetails.thread val attributesBuilder = @@ -66,8 +70,10 @@ internal class CrashReporter( .emit() } - private fun waitForCrashFlush(openTelemetry: OpenTelemetrySdk) { - val flushResult = openTelemetry.sdkLoggerProvider.forceFlush() - flushResult.join(10, TimeUnit.SECONDS) + private fun waitForCrashFlush(openTelemetry: OpenTelemetryRum) { + if (openTelemetry is LogRecordFlusher) { + val flushResult = openTelemetry.flushLogRecords() + flushResult.join(10, TimeUnit.SECONDS) + } } } diff --git a/instrumentation/crash/src/main/java/io/opentelemetry/android/instrumentation/crash/CrashReporterInstrumentation.kt b/instrumentation/crash/src/main/java/io/opentelemetry/android/instrumentation/crash/CrashReporterInstrumentation.kt index 7dcef941f..6a7de3f8b 100644 --- a/instrumentation/crash/src/main/java/io/opentelemetry/android/instrumentation/crash/CrashReporterInstrumentation.kt +++ b/instrumentation/crash/src/main/java/io/opentelemetry/android/instrumentation/crash/CrashReporterInstrumentation.kt @@ -9,7 +9,6 @@ import com.google.auto.service.AutoService import io.opentelemetry.android.instrumentation.AndroidInstrumentation import io.opentelemetry.android.instrumentation.InstallationContext import io.opentelemetry.android.instrumentation.common.EventAttributesExtractor -import io.opentelemetry.sdk.OpenTelemetrySdk /** Entrypoint for installing the crash reporting instrumentation. */ @AutoService(AndroidInstrumentation::class) @@ -27,7 +26,7 @@ class CrashReporterInstrumentation : AndroidInstrumentation { val crashReporter = CrashReporter(additionalExtractors) // TODO avoid using OpenTelemetrySdk methods, only use the ones from OpenTelemetry api. - crashReporter.install(ctx.openTelemetry as OpenTelemetrySdk) + crashReporter.install(ctx.openTelemetry) } override val name: String = "crash"