Skip to content
Open
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
46 changes: 6 additions & 40 deletions android-agent/api/android-agent.api
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,10 @@ public abstract interface annotation class io/opentelemetry/android/Incubating :

public final class io/opentelemetry/android/agent/OpenTelemetryRumInitializer {
public static final field INSTANCE Lio/opentelemetry/android/agent/OpenTelemetryRumInitializer;
public static final fun initialize (Landroid/app/Application;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lio/opentelemetry/android/OpenTelemetryRum;
public static final fun initialize (Landroid/content/Context;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lio/opentelemetry/android/OpenTelemetryRum;
public static synthetic fun initialize$default (Landroid/app/Application;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lio/opentelemetry/android/OpenTelemetryRum;
public static synthetic fun initialize$default (Landroid/content/Context;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lio/opentelemetry/android/OpenTelemetryRum;
}

public abstract interface class io/opentelemetry/android/agent/connectivity/EndpointConnectivity {
public abstract fun getHeaders ()Ljava/util/Map;
public abstract fun getUrl ()Ljava/lang/String;
}

public final class io/opentelemetry/android/agent/connectivity/HttpEndpointConnectivity : io/opentelemetry/android/agent/connectivity/EndpointConnectivity {
public static final field Companion Lio/opentelemetry/android/agent/connectivity/HttpEndpointConnectivity$Companion;
public synthetic fun <init> (Ljava/lang/String;Ljava/util/Map;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun getHeaders ()Ljava/util/Map;
public fun getUrl ()Ljava/lang/String;
}

public final class io/opentelemetry/android/agent/connectivity/HttpEndpointConnectivity$Companion {
public final fun forLogs (Ljava/lang/String;Ljava/util/Map;)Lio/opentelemetry/android/agent/connectivity/HttpEndpointConnectivity;
public static synthetic fun forLogs$default (Lio/opentelemetry/android/agent/connectivity/HttpEndpointConnectivity$Companion;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lio/opentelemetry/android/agent/connectivity/HttpEndpointConnectivity;
public final fun forMetrics (Ljava/lang/String;Ljava/util/Map;)Lio/opentelemetry/android/agent/connectivity/HttpEndpointConnectivity;
public static synthetic fun forMetrics$default (Lio/opentelemetry/android/agent/connectivity/HttpEndpointConnectivity$Companion;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lio/opentelemetry/android/agent/connectivity/HttpEndpointConnectivity;
public final fun forTraces (Ljava/lang/String;Ljava/util/Map;)Lio/opentelemetry/android/agent/connectivity/HttpEndpointConnectivity;
public static synthetic fun forTraces$default (Lio/opentelemetry/android/agent/connectivity/HttpEndpointConnectivity$Companion;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lio/opentelemetry/android/agent/connectivity/HttpEndpointConnectivity;
public static final fun initialize (Landroid/app/Application;Lkotlin/jvm/functions/Function1;)Lio/opentelemetry/android/OpenTelemetryRum;
public static final fun initialize (Landroid/content/Context;Lkotlin/jvm/functions/Function1;)Lio/opentelemetry/android/OpenTelemetryRum;
public static synthetic fun initialize$default (Landroid/app/Application;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lio/opentelemetry/android/OpenTelemetryRum;
public static synthetic fun initialize$default (Landroid/content/Context;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lio/opentelemetry/android/OpenTelemetryRum;
}

public final class io/opentelemetry/android/agent/dsl/DiskBufferingConfigurationSpec : io/opentelemetry/android/agent/dsl/instrumentation/CanBeEnabledAndDisabled {
Expand All @@ -52,14 +31,14 @@ public final class io/opentelemetry/android/agent/dsl/HttpExportConfiguration {
}

public final class io/opentelemetry/android/agent/dsl/OpenTelemetryConfiguration {
public fun <init> ()V
public final fun diskBuffering (Lkotlin/jvm/functions/Function1;)V
public final fun globalAttributes (Lkotlin/jvm/functions/Function0;)V
public final fun httpExport (Lkotlin/jvm/functions/Function1;)V
public final fun instrumentations (Lkotlin/jvm/functions/Function1;)V
public final fun session (Lkotlin/jvm/functions/Function1;)V
}

public final class io/opentelemetry/android/agent/dsl/SessionConfiguration {
public synthetic fun <init> (JJILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun getBackgroundInactivityTimeout-UwyO8pc ()J
public final fun getMaxLifetime-UwyO8pc ()J
public final fun setBackgroundInactivityTimeout-LRDsOJo (J)V
Expand Down Expand Up @@ -108,16 +87,3 @@ public final class io/opentelemetry/android/agent/dsl/instrumentation/SlowRender
public fun enabled (Z)V
}

public final class io/opentelemetry/android/agent/session/SessionConfig {
public static final field Companion Lio/opentelemetry/android/agent/session/SessionConfig$Companion;
public synthetic fun <init> (JJILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (JJLkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun getBackgroundInactivityTimeout-UwyO8pc ()J
public final fun getMaxLifetime-UwyO8pc ()J
public static final fun withDefaults ()Lio/opentelemetry/android/agent/session/SessionConfig;
}

public final class io/opentelemetry/android/agent/session/SessionConfig$Companion {
public final fun withDefaults ()Lio/opentelemetry/android/agent/session/SessionConfig;
}

Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,12 @@ import android.app.Application
import android.content.Context
import io.opentelemetry.android.Incubating
import io.opentelemetry.android.OpenTelemetryRum
import io.opentelemetry.android.agent.dsl.DiskBufferingConfigurationSpec
import io.opentelemetry.android.agent.dsl.OpenTelemetryConfiguration
import io.opentelemetry.android.agent.session.SessionConfig
import io.opentelemetry.android.agent.session.SessionIdTimeoutHandler
import io.opentelemetry.android.agent.session.SessionManager
import io.opentelemetry.android.config.OtelRumConfig
import io.opentelemetry.android.features.diskbuffering.DiskBufferingConfig
import io.opentelemetry.android.internal.services.Services
import io.opentelemetry.android.session.SessionProvider
import io.opentelemetry.api.common.Attributes
import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporter
import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporter
import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter
Expand All @@ -29,22 +25,16 @@ object OpenTelemetryRumInitializer {
* Opinionated [OpenTelemetryRum] initialization.
*
* @param application Your android app's application object.
* @param globalAttributes Configures the set of global attributes to emit with every span and event.
* @param diskBuffering Configures the disk buffering feature.
* @param configuration Type-safe config DSL that controls how OpenTelemetry
* should behave.
*/
@JvmStatic
fun initialize(
application: Application,
globalAttributes: (() -> Attributes)? = null,
diskBuffering: (DiskBufferingConfigurationSpec.() -> Unit)? = null,
configuration: (OpenTelemetryConfiguration.() -> Unit) = {},
): OpenTelemetryRum =
initialize(
context = application,
globalAttributes = globalAttributes,
diskBuffering = diskBuffering,
configuration = configuration,
)

Expand All @@ -55,30 +45,17 @@ object OpenTelemetryRumInitializer {
* subclass or an appropriate context that allows retrieving the application context. If you
* supply an inappropriate context (e.g. from attachBaseContext) then instrumentation relying
* on activity lifecycle callbacks will not function correctly.
* @param globalAttributes Configures the set of global attributes to emit with every span and event.
* @param diskBuffering Configures the disk buffering feature.
* @param configuration Type-safe config DSL that controls how OpenTelemetry
* should behave.
*/
@JvmStatic
fun initialize(
context: Context,
globalAttributes: (() -> Attributes)? = null,
diskBuffering: (DiskBufferingConfigurationSpec.() -> Unit)? = null,
configuration: (OpenTelemetryConfiguration.() -> Unit) = {},
): OpenTelemetryRum {
val rumConfig = OtelRumConfig()
val cfg = OpenTelemetryConfiguration(rumConfig)
val cfg = OpenTelemetryConfiguration()
configuration(cfg)

val diskBufferingConfigurationSpec = DiskBufferingConfigurationSpec()
diskBuffering?.invoke(diskBufferingConfigurationSpec)
rumConfig.setDiskBufferingConfig(DiskBufferingConfig.create(enabled = diskBufferingConfigurationSpec.enabled))

globalAttributes?.let {
rumConfig.setGlobalAttributes(it::invoke)
}

val sessionConfig =
SessionConfig(
cfg.sessionConfig.backgroundInactivityTimeout,
Expand All @@ -95,7 +72,7 @@ object OpenTelemetryRumInitializer {
}

return OpenTelemetryRum
.builder(ctx, rumConfig)
.builder(ctx, cfg.rumConfig)
.setSessionProvider(createSessionProvider(ctx, sessionConfig))
.addSpanExporterCustomizer {
OtlpHttpSpanExporter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

package io.opentelemetry.android.agent.connectivity

interface EndpointConnectivity {
internal interface EndpointConnectivity {
fun getUrl(): String

fun getHeaders(): Map<String, String>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

package io.opentelemetry.android.agent.connectivity

class HttpEndpointConnectivity private constructor(
internal class HttpEndpointConnectivity private constructor(
private val url: String,
private val headers: Map<String, String>,
) : EndpointConnectivity {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@ class HttpExportConfiguration internal constructor() {
* Global URL for HTTP export requests.
*/
var baseUrl: String = ""
set(value) {
field = value
spansConfig.url = HttpEndpointConnectivity.forTraces(value).getUrl()
logsConfig.url = HttpEndpointConnectivity.forLogs(value).getUrl()
metricsConfig.url = HttpEndpointConnectivity.forMetrics(value).getUrl()
}

/**
* Global headers that should be attached to any HTTP export requests.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,24 +8,20 @@ package io.opentelemetry.android.agent.dsl
import io.opentelemetry.android.Incubating
import io.opentelemetry.android.agent.dsl.instrumentation.InstrumentationConfiguration
import io.opentelemetry.android.config.OtelRumConfig
import io.opentelemetry.android.features.diskbuffering.DiskBufferingConfig
import io.opentelemetry.api.common.Attributes

/**
* Type-safe config DSL that controls how OpenTelemetry should behave.
*/
@OptIn(Incubating::class)
@OpenTelemetryDslMarker
class OpenTelemetryConfiguration internal constructor(
internal val rumConfig: OtelRumConfig = OtelRumConfig(),
) {
internal val exportConfig: HttpExportConfiguration = HttpExportConfiguration()

internal val sessionConfig: SessionConfiguration = SessionConfiguration()

/**
* Configures individual instrumentations.
*/
internal val instrumentations: InstrumentationConfiguration =
InstrumentationConfiguration(rumConfig)
class OpenTelemetryConfiguration internal constructor() {
internal val rumConfig: OtelRumConfig = OtelRumConfig()
internal val exportConfig = HttpExportConfiguration()
internal val sessionConfig = SessionConfiguration()
internal val diskBufferingConfig = DiskBufferingConfigurationSpec()
internal val instrumentations = InstrumentationConfiguration(rumConfig)

/**
* Configures how OpenTelemetry should export telemetry over HTTP.
Expand All @@ -47,4 +43,19 @@ class OpenTelemetryConfiguration internal constructor(
fun session(action: SessionConfiguration.() -> Unit) {
sessionConfig.action()
}

/**
* Configures attributes that are used globally.
*/
fun globalAttributes(action: () -> Attributes) {
rumConfig.setGlobalAttributes(action())
}

/**
* Configures disk buffering behavior of exported telemetry.
*/
fun diskBuffering(action: DiskBufferingConfigurationSpec.() -> Unit) {
diskBufferingConfig.action()
rumConfig.setDiskBufferingConfig(DiskBufferingConfig.create(enabled = diskBufferingConfig.enabled))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import kotlin.time.Duration.Companion.hours
import kotlin.time.Duration.Companion.minutes

@OpenTelemetryDslMarker
class SessionConfiguration internal constructor(
var backgroundInactivityTimeout: Duration = 15.minutes,
var maxLifetime: Duration = 4.hours,
)
class SessionConfiguration internal constructor() {
var backgroundInactivityTimeout: Duration = 15.minutes
var maxLifetime: Duration = 4.hours
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,11 @@

package io.opentelemetry.android.agent.session

import io.opentelemetry.android.Incubating
import kotlin.time.Duration
import kotlin.time.Duration.Companion.hours
import kotlin.time.Duration.Companion.minutes

@Incubating
class SessionConfig(
internal class SessionConfig(
val backgroundInactivityTimeout: Duration = 15.minutes,
val maxLifetime: Duration = 4.hours,
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,13 @@ class OtelDemoApplication : Application() {
try {
rum = OpenTelemetryRumInitializer.initialize(
application = this,
globalAttributes = { Attributes.of(stringKey("toolkit"), "jetpack compose") },
configuration = {
httpExport {
baseUrl = "http://10.0.2.2:4318"
}
globalAttributes {
Attributes.of(stringKey("toolkit"), "jetpack compose")
}
}
)
Log.d(TAG, "RUM session started: " + rum?.getRumSessionId())
Expand Down