31
31
import io .opentelemetry .android .internal .processors .SessionIdLogRecordAppender ;
32
32
import io .opentelemetry .android .internal .services .CacheStorage ;
33
33
import io .opentelemetry .android .internal .services .Preferences ;
34
- import io .opentelemetry .android .internal .services .ServiceManager ;
35
- import io .opentelemetry .android .internal .services .ServiceManagerImpl ;
36
- import io .opentelemetry .android .internal .services .periodicwork .PeriodicWorkService ;
34
+ import io .opentelemetry .android .internal .services .Services ;
35
+ import io .opentelemetry .android .internal .services .periodicwork .PeriodicWork ;
37
36
import io .opentelemetry .android .internal .session .SessionIdTimeoutHandler ;
38
37
import io .opentelemetry .android .internal .session .SessionManagerImpl ;
39
38
import io .opentelemetry .android .session .SessionManager ;
@@ -101,8 +100,6 @@ public final class OpenTelemetryRumBuilder {
101
100
102
101
private boolean isBuilt = false ;
103
102
104
- @ Nullable private ServiceManager serviceManager ;
105
-
106
103
@ Nullable private ExportScheduleHandler exportScheduleHandler ;
107
104
@ Nullable private SessionManager sessionManager ;
108
105
@@ -297,8 +294,9 @@ public OpenTelemetryRum build() {
297
294
throw new IllegalStateException ("You cannot call build multiple times" );
298
295
}
299
296
isBuilt = true ;
297
+ Services services = Services .get (application );
300
298
InitializationEvents initializationEvents = InitializationEvents .get ();
301
- applyConfiguration (initializationEvents );
299
+ applyConfiguration (services , initializationEvents );
302
300
303
301
BufferDelegatingLogExporter bufferDelegatingLogExporter = new BufferDelegatingLogExporter ();
304
302
@@ -317,7 +315,10 @@ public OpenTelemetryRum build() {
317
315
sessionManager , application , bufferDelegatingSpanExporter ))
318
316
.setLoggerProvider (
319
317
buildLoggerProvider (
320
- sessionManager , application , bufferDelegatingLogExporter ))
318
+ services ,
319
+ sessionManager ,
320
+ application ,
321
+ bufferDelegatingLogExporter ))
321
322
.setMeterProvider (buildMeterProvider (application ))
322
323
.setPropagators (buildFinalPropagators ())
323
324
.build ();
@@ -331,13 +332,14 @@ public OpenTelemetryRum build() {
331
332
timeoutHandler ,
332
333
sessionManager ,
333
334
config .shouldDiscoverInstrumentations (),
334
- getServiceManager () );
335
+ services );
335
336
336
337
// AsyncTask is deprecated but the thread pool is still used all over the Android SDK
337
338
// and it provides a way to get a background thread without having to create a new one.
338
339
android .os .AsyncTask .THREAD_POOL_EXECUTOR .execute (
339
340
() ->
340
341
initializeExporters (
342
+ services ,
341
343
initializationEvents ,
342
344
bufferDelegatingSpanExporter ,
343
345
bufferDelegatingLogExporter ));
@@ -348,6 +350,7 @@ public OpenTelemetryRum build() {
348
350
}
349
351
350
352
private void initializeExporters (
353
+ Services services ,
351
354
InitializationEvents initializationEvents ,
352
355
BufferDelegatingSpanExporter bufferDelegatingSpanExporter ,
353
356
BufferDelegatingLogExporter bufferedDelegatingLogExporter ) {
@@ -358,7 +361,7 @@ private void initializeExporters(
358
361
SignalFromDiskExporter signalFromDiskExporter = null ;
359
362
if (diskBufferingConfig .getEnabled ()) {
360
363
try {
361
- StorageConfiguration storageConfiguration = createStorageConfiguration ();
364
+ StorageConfiguration storageConfiguration = createStorageConfiguration (services );
362
365
final SpanExporter originalSpanExporter = spanExporter ;
363
366
spanExporter =
364
367
SpanToDiskExporter .create (originalSpanExporter , storageConfiguration );
@@ -379,23 +382,7 @@ private void initializeExporters(
379
382
initializationEvents .spanExporterInitialized (spanExporter );
380
383
bufferedDelegatingLogExporter .setDelegate (logsExporter );
381
384
bufferDelegatingSpanExporter .setDelegate (spanExporter );
382
- scheduleDiskTelemetryReader (signalFromDiskExporter );
383
- }
384
-
385
- @ NonNull
386
- private ServiceManager getServiceManager () {
387
- if (serviceManager == null ) {
388
- serviceManager = ServiceManagerImpl .Companion .create (application );
389
- }
390
- // This can never be null since we never write `null` to it
391
- return requireNonNull (serviceManager );
392
- }
393
-
394
- public OpenTelemetryRumBuilder setServiceManager (@ NonNull ServiceManager serviceManager ) {
395
- requireNonNull (serviceManager , "serviceManager cannot be null" );
396
- checkNotBuilt ();
397
- this .serviceManager = serviceManager ;
398
- return this ;
385
+ scheduleDiskTelemetryReader (services , signalFromDiskExporter );
399
386
}
400
387
401
388
@ VisibleForTesting
@@ -416,9 +403,9 @@ public OpenTelemetryRumBuilder setExportScheduleHandler(
416
403
return this ;
417
404
}
418
405
419
- private StorageConfiguration createStorageConfiguration () throws IOException {
420
- Preferences preferences = getServiceManager () .getPreferences ();
421
- CacheStorage storage = getServiceManager () .getCacheStorage ();
406
+ private StorageConfiguration createStorageConfiguration (Services services ) throws IOException {
407
+ Preferences preferences = services .getPreferences ();
408
+ CacheStorage storage = services .getCacheStorage ();
422
409
DiskBufferingConfig config = this .config .getDiskBufferingConfig ();
423
410
DiskManager diskManager = new DiskManager (storage , preferences , config );
424
411
return StorageConfiguration .builder ()
@@ -434,12 +421,12 @@ private StorageConfiguration createStorageConfiguration() throws IOException {
434
421
.build ();
435
422
}
436
423
437
- private void scheduleDiskTelemetryReader (@ Nullable SignalFromDiskExporter signalExporter ) {
424
+ private void scheduleDiskTelemetryReader (
425
+ Services services , @ Nullable SignalFromDiskExporter signalExporter ) {
438
426
if (exportScheduleHandler == null ) {
439
- ServiceManager serviceManager = getServiceManager ();
440
427
// TODO: Is it safe to get the work service yet here? If so, we can
441
428
// avoid all this lazy supplier stuff....
442
- Function0 <PeriodicWorkService > getWorkService = serviceManager :: getPeriodicWorkService ;
429
+ Function0 <PeriodicWork > getWorkService = services :: getPeriodicWork ;
443
430
exportScheduleHandler =
444
431
new DefaultExportScheduleHandler (
445
432
new DefaultExportScheduler (getWorkService ), getWorkService );
@@ -475,7 +462,7 @@ public OpenTelemetryRumBuilder addOtelSdkReadyListener(Consumer<OpenTelemetrySdk
475
462
}
476
463
477
464
/** Leverage the configuration to wire up various instrumentation components. */
478
- private void applyConfiguration (InitializationEvents initializationEvents ) {
465
+ private void applyConfiguration (Services services , InitializationEvents initializationEvents ) {
479
466
if (config .shouldGenerateSdkInitializationEvents ()) {
480
467
initializationEvents .recordConfiguration (config );
481
468
}
@@ -498,7 +485,7 @@ private void applyConfiguration(InitializationEvents initializationEvents) {
498
485
(tracerProviderBuilder , app ) -> {
499
486
SpanProcessor networkAttributesSpanAppender =
500
487
NetworkAttributesSpanAppender .create (
501
- getServiceManager () .getCurrentNetworkProvider ());
488
+ services .getCurrentNetworkProvider ());
502
489
return tracerProviderBuilder .addSpanProcessor (
503
490
networkAttributesSpanAppender );
504
491
});
@@ -511,7 +498,7 @@ private void applyConfiguration(InitializationEvents initializationEvents) {
511
498
(tracerProviderBuilder , app ) -> {
512
499
SpanProcessor screenAttributesAppender =
513
500
new ScreenAttributesSpanProcessor (
514
- getServiceManager (). getVisibleScreenService ());
501
+ services . getVisibleScreenTracker ());
515
502
return tracerProviderBuilder .addSpanProcessor (screenAttributesAppender );
516
503
});
517
504
}
@@ -535,6 +522,7 @@ private SdkTracerProvider buildTracerProvider(
535
522
}
536
523
537
524
private SdkLoggerProvider buildLoggerProvider (
525
+ Services services ,
538
526
SessionProvider sessionProvider ,
539
527
Application application ,
540
528
LogRecordExporter logsExporter ) {
@@ -544,7 +532,7 @@ private SdkLoggerProvider buildLoggerProvider(
544
532
.addLogRecordProcessor (new SessionIdLogRecordAppender (sessionProvider ))
545
533
.addLogRecordProcessor (
546
534
new ScreenAttributesLogRecordProcessor (
547
- getServiceManager (). getVisibleScreenService ()))
535
+ services . getVisibleScreenTracker ()))
548
536
.addLogRecordProcessor (
549
537
new GlobalAttributesLogRecordAppender (
550
538
config .getGlobalAttributesSupplier ()));
0 commit comments