Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 ->
Expand All @@ -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 =
Expand All @@ -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)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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"
Expand Down
Loading