From 89c26cdd22baf81ce43cc4c7d4793511540b6a9b Mon Sep 17 00:00:00 2001 From: Cesar Munoz <56847527+LikeTheSalad@users.noreply.github.com> Date: Mon, 26 Jan 2026 16:10:38 +0100 Subject: [PATCH 1/3] Base changes --- .../io/opentelemetry/android/OpenTelemetryRum.kt | 4 ++++ .../android/instrumentation/InstallationContext.kt | 4 ++-- .../android/instrumentation/crash/CrashReporter.kt | 13 ++++++++----- .../crash/CrashReporterInstrumentation.kt | 3 +-- 4 files changed, 15 insertions(+), 9 deletions(-) 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/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..e49741cb7 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,13 +7,13 @@ package io.opentelemetry.android.instrumentation import android.app.Application import android.content.Context +import io.opentelemetry.android.OpenTelemetryRum import io.opentelemetry.android.session.SessionProvider -import io.opentelemetry.api.OpenTelemetry import io.opentelemetry.sdk.common.Clock class InstallationContext( val context: Context, - val openTelemetry: OpenTelemetry, + val openTelemetry: OpenTelemetryRum, val sessionProvider: SessionProvider, val clock: Clock, ) { 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..590b8f8ff 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,11 @@ 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.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 +24,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 +38,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,7 +69,7 @@ internal class CrashReporter( .emit() } - private fun waitForCrashFlush(openTelemetry: OpenTelemetrySdk) { + private fun waitForCrashFlush(openTelemetry: OpenTelemetryRum) { val flushResult = openTelemetry.sdkLoggerProvider.forceFlush() 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" From e8f0384b4cda5930fca7d38a114d18d47d141693 Mon Sep 17 00:00:00 2001 From: Cesar Munoz <56847527+LikeTheSalad@users.noreply.github.com> Date: Mon, 26 Jan 2026 16:38:04 +0100 Subject: [PATCH 2/3] Clean up InstallationContext --- .../android/instrumentation/InstallationContext.kt | 4 ---- 1 file changed, 4 deletions(-) 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 e49741cb7..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 @@ -8,14 +8,10 @@ package io.opentelemetry.android.instrumentation import android.app.Application import android.content.Context import io.opentelemetry.android.OpenTelemetryRum -import io.opentelemetry.android.session.SessionProvider -import io.opentelemetry.sdk.common.Clock class InstallationContext( val context: Context, val openTelemetry: OpenTelemetryRum, - val sessionProvider: SessionProvider, - val clock: Clock, ) { val application: Application? = context as? Application } From 8e2b406ef0bc5a39dadcf8833349bd72def99071 Mon Sep 17 00:00:00 2001 From: Cesar Munoz <56847527+LikeTheSalad@users.noreply.github.com> Date: Mon, 26 Jan 2026 16:14:19 +0100 Subject: [PATCH 3/3] Flushing from a separate api file --- .../opentelemetry/android/tools/LogRecordFlusher.kt | 12 ++++++++++++ .../android/instrumentation/crash/CrashReporter.kt | 7 +++++-- 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 agent-api/src/main/java/io/opentelemetry/android/tools/LogRecordFlusher.kt 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/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 590b8f8ff..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 @@ -8,6 +8,7 @@ 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.semconv.ExceptionAttributes.EXCEPTION_MESSAGE @@ -70,7 +71,9 @@ internal class CrashReporter( } private fun waitForCrashFlush(openTelemetry: OpenTelemetryRum) { - val flushResult = openTelemetry.sdkLoggerProvider.forceFlush() - flushResult.join(10, TimeUnit.SECONDS) + if (openTelemetry is LogRecordFlusher) { + val flushResult = openTelemetry.flushLogRecords() + flushResult.join(10, TimeUnit.SECONDS) + } } }