@@ -10,6 +10,9 @@ import io.opentelemetry.android.OpenTelemetryRum
1010import io.opentelemetry.android.OpenTelemetryRumBuilder
1111import io.opentelemetry.android.agent.connectivity.EndpointConnectivity
1212import io.opentelemetry.android.agent.connectivity.HttpEndpointConnectivity
13+ import io.opentelemetry.android.agent.session.SessionConfig
14+ import io.opentelemetry.android.agent.session.SessionIdTimeoutHandler
15+ import io.opentelemetry.android.agent.session.SessionManager
1316import io.opentelemetry.android.config.OtelRumConfig
1417import io.opentelemetry.android.instrumentation.AndroidInstrumentation
1518import io.opentelemetry.android.instrumentation.AndroidInstrumentationLoader
@@ -22,6 +25,7 @@ import io.opentelemetry.android.instrumentation.fragment.FragmentLifecycleInstru
2225import io.opentelemetry.android.instrumentation.network.NetworkAttributesExtractor
2326import io.opentelemetry.android.instrumentation.network.NetworkChangeInstrumentation
2427import io.opentelemetry.android.instrumentation.slowrendering.SlowRenderingInstrumentation
28+ import io.opentelemetry.android.internal.services.Services
2529import io.opentelemetry.api.trace.Tracer
2630import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporter
2731import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporter
@@ -40,6 +44,7 @@ object OpenTelemetryRumInitializer {
4044 * @param logEndpointConnectivity Log-specific endpoint configuration.
4145 * @param metricEndpointConnectivity Metric-specific endpoint configuration.
4246 * @param rumConfig Configuration used by [OpenTelemetryRumBuilder].
47+ * @param sessionConfig The session configuration, which includes inactivity timeout and maximum lifetime durations.
4348 * @param activityTracerCustomizer Tracer customizer for [ActivityLifecycleInstrumentation].
4449 * @param activityNameExtractor Name extractor for [ActivityLifecycleInstrumentation].
4550 * @param fragmentTracerCustomizer Tracer customizer for [FragmentLifecycleInstrumentation].
@@ -70,6 +75,7 @@ object OpenTelemetryRumInitializer {
7075 endpointHeaders,
7176 ),
7277 rumConfig : OtelRumConfig = OtelRumConfig (),
78+ sessionConfig : SessionConfig = SessionConfig .withDefaults(),
7379 activityTracerCustomizer : ((Tracer ) -> Tracer )? = null,
7480 activityNameExtractor : ScreenNameExtractor ? = null,
7581 fragmentTracerCustomizer : ((Tracer ) -> Tracer )? = null,
@@ -79,6 +85,60 @@ object OpenTelemetryRumInitializer {
7985 networkChangeAttributesExtractors : List <NetworkAttributesExtractor > = emptyList(),
8086 slowRenderingDetectionPollInterval : Duration ? = null,
8187 ): OpenTelemetryRum {
88+ configureInstrumentation(
89+ activityTracerCustomizer,
90+ activityNameExtractor,
91+ fragmentTracerCustomizer,
92+ fragmentNameExtractor,
93+ anrAttributesExtractors,
94+ crashAttributesExtractors,
95+ networkChangeAttributesExtractors,
96+ slowRenderingDetectionPollInterval,
97+ )
98+
99+ return OpenTelemetryRum
100+ .builder(application, rumConfig)
101+ .setSessionProvider(createSessionManager(application, sessionConfig))
102+ .addSpanExporterCustomizer {
103+ OtlpHttpSpanExporter
104+ .builder()
105+ .setEndpoint(spanEndpointConnectivity.getUrl())
106+ .setHeaders(spanEndpointConnectivity::getHeaders)
107+ .build()
108+ }.addLogRecordExporterCustomizer {
109+ OtlpHttpLogRecordExporter
110+ .builder()
111+ .setEndpoint(logEndpointConnectivity.getUrl())
112+ .setHeaders(logEndpointConnectivity::getHeaders)
113+ .build()
114+ }.addMetricExporterCustomizer {
115+ OtlpHttpMetricExporter
116+ .builder()
117+ .setEndpoint(metricEndpointConnectivity.getUrl())
118+ .setHeaders(metricEndpointConnectivity::getHeaders)
119+ .build()
120+ }.build()
121+ }
122+
123+ private fun createSessionManager (
124+ application : Application ,
125+ sessionConfig : SessionConfig ,
126+ ): SessionManager {
127+ val timeoutHandler = SessionIdTimeoutHandler (sessionConfig)
128+ Services .get(application).appLifecycle.registerListener(timeoutHandler)
129+ return SessionManager .create(timeoutHandler, sessionConfig)
130+ }
131+
132+ private fun configureInstrumentation (
133+ activityTracerCustomizer : ((Tracer ) -> Tracer )? ,
134+ activityNameExtractor : ScreenNameExtractor ? ,
135+ fragmentTracerCustomizer : ((Tracer ) -> Tracer )? ,
136+ fragmentNameExtractor : ScreenNameExtractor ? ,
137+ anrAttributesExtractors : List <AttributesExtractor <Array <StackTraceElement >, Void >>,
138+ crashAttributesExtractors : List <AttributesExtractor <CrashDetails , Void >>,
139+ networkChangeAttributesExtractors : List <NetworkAttributesExtractor >,
140+ slowRenderingDetectionPollInterval : Duration ? ,
141+ ) {
82142 val activityLifecycleInstrumentation =
83143 getInstrumentation<ActivityLifecycleInstrumentation >()
84144 if (activityTracerCustomizer != null ) {
@@ -123,28 +183,6 @@ object OpenTelemetryRumInitializer {
123183 slowRenderingDetectionPollInterval,
124184 )
125185 }
126-
127- return OpenTelemetryRum
128- .builder(application, rumConfig)
129- .addSpanExporterCustomizer {
130- OtlpHttpSpanExporter
131- .builder()
132- .setEndpoint(spanEndpointConnectivity.getUrl())
133- .setHeaders(spanEndpointConnectivity::getHeaders)
134- .build()
135- }.addLogRecordExporterCustomizer {
136- OtlpHttpLogRecordExporter
137- .builder()
138- .setEndpoint(logEndpointConnectivity.getUrl())
139- .setHeaders(logEndpointConnectivity::getHeaders)
140- .build()
141- }.addMetricExporterCustomizer {
142- OtlpHttpMetricExporter
143- .builder()
144- .setEndpoint(metricEndpointConnectivity.getUrl())
145- .setHeaders(metricEndpointConnectivity::getHeaders)
146- .build()
147- }.build()
148186 }
149187
150188 private inline fun <reified T : AndroidInstrumentation > getInstrumentation (): T ? =
0 commit comments