Skip to content

Commit

Permalink
Instrumentation API part 2 (open-telemetry#408) (open-telemetry#416)
Browse files Browse the repository at this point in the history
* Moving network provider tools to services

* Moving network service related tests

* Moving network attr init feature to the agent

* Making network instrumentation depend on the agent

* Initializing CurrentNetworkProvider as service

* Clean up config

* Created NetworkChangeInstrumentation

* Updated network monitor tests

* Clean up

* Renaming installOn by start

* Adding internal class docs

* Fixing visible for tests comment

* Rename .java to .kt

* Removing Carrier.Builder
  • Loading branch information
LikeTheSalad committed Jun 14, 2024
1 parent 519aa6f commit 99f3189
Show file tree
Hide file tree
Showing 35 changed files with 330 additions and 417 deletions.
1 change: 0 additions & 1 deletion android-agent/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ dependencies {
implementation(project(":instrumentation:anr"))
implementation(project(":instrumentation:common-api"))
implementation(project(":instrumentation:crash"))
implementation(project(":instrumentation:network"))
implementation(project(":instrumentation:slowrendering"))
implementation(libs.androidx.core)
implementation(libs.androidx.navigation.fragment)
Expand Down
1 change: 1 addition & 0 deletions android-agent/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,10 @@
import io.opentelemetry.android.instrumentation.common.InstrumentedApplication;
import io.opentelemetry.android.instrumentation.crash.CrashReporter;
import io.opentelemetry.android.instrumentation.crash.CrashReporterBuilder;
import io.opentelemetry.android.instrumentation.network.CurrentNetworkProvider;
import io.opentelemetry.android.instrumentation.network.NetworkAttributesSpanAppender;
import io.opentelemetry.android.instrumentation.network.NetworkChangeMonitor;
import io.opentelemetry.android.instrumentation.slowrendering.SlowRenderingDetector;
import io.opentelemetry.android.instrumentation.startup.InitializationEvents;
import io.opentelemetry.android.instrumentation.startup.SdkInitializationEvents;
import io.opentelemetry.android.internal.features.networkattrs.NetworkAttributesSpanAppender;
import io.opentelemetry.android.internal.features.persistence.DiskManager;
import io.opentelemetry.android.internal.features.persistence.SimpleTemporaryFileProvider;
import io.opentelemetry.android.internal.processors.GlobalAttributesLogRecordAppender;
Expand Down Expand Up @@ -100,7 +98,6 @@ public final class OpenTelemetryRumBuilder {
(a) -> a;

private Resource resource;
@Nullable private CurrentNetworkProvider currentNetworkProvider = null;
private InitializationEvents initializationEvents = InitializationEvents.NO_OP;
private Consumer<AnrDetectorBuilder> anrCustomizer = x -> {};
private Consumer<CrashReporterBuilder> crashReporterCustomizer = x -> {};
Expand Down Expand Up @@ -130,18 +127,6 @@ public OpenTelemetryRumBuilder setResource(Resource resource) {
return this;
}

/**
* Call this to pass an existing CurrentNetworkProvider instance to share with the underlying
* OpenTelemetry Rum instrumentation.
*
* @return {@code this}
*/
public OpenTelemetryRumBuilder setCurrentNetworkProvider(
CurrentNetworkProvider currentNetworkProvider) {
this.currentNetworkProvider = currentNetworkProvider;
return this;
}

/**
* Merges a new {@link Resource} with any existing {@link Resource} in this builder. The
* resulting {@link Resource} will be attached to all telemetry emitted by the {@link
Expand Down Expand Up @@ -455,27 +440,17 @@ private void applyConfiguration() {
// Network specific attributes
if (config.shouldIncludeNetworkAttributes()) {
// Add span processor that appends network attributes.
CurrentNetworkProvider currentNetworkProvider = getOrCreateCurrentNetworkProvider();
addTracerProviderCustomizer(
(tracerProviderBuilder, app) -> {
SpanProcessor networkAttributesSpanAppender =
NetworkAttributesSpanAppender.create(currentNetworkProvider);
NetworkAttributesSpanAppender.create(
ServiceManager.get().getCurrentNetworkProvider());
return tracerProviderBuilder.addSpanProcessor(
networkAttributesSpanAppender);
});
initializationEvents.currentNetworkProviderInitialized();
}

// Add network change monitor if enabled (default = = true)
if (config.isNetworkChangeMonitoringEnabled()) {
addInstrumentation(
app -> {
NetworkChangeMonitor.create(getOrCreateCurrentNetworkProvider())
.installOn(app);
initializationEvents.networkMonitorInitialized();
});
}

// Add span processor that appends screen attribute(s)
if (config.shouldIncludeScreenAttributes()) {
addTracerProviderCustomizer(
Expand Down Expand Up @@ -530,13 +505,6 @@ private void applyConfiguration() {
}
}

private CurrentNetworkProvider getOrCreateCurrentNetworkProvider() {
if (currentNetworkProvider == null) {
this.currentNetworkProvider = CurrentNetworkProvider.createAndStart(application);
}
return currentNetworkProvider;
}

private SdkTracerProvider buildTracerProvider(
SessionId sessionId, Application application, SpanExporter spanExporter) {
SdkTracerProviderBuilder tracerProviderBuilder =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import io.opentelemetry.android.ScreenAttributesSpanProcessor;
import io.opentelemetry.android.features.diskbuffering.DiskBufferingConfiguration;
import io.opentelemetry.android.instrumentation.network.CurrentNetworkProvider;
import io.opentelemetry.android.internal.services.network.CurrentNetworkProvider;
import io.opentelemetry.api.common.Attributes;
import java.time.Duration;
import java.util.function.Supplier;
Expand All @@ -28,7 +28,6 @@ public class OtelRumConfig {
private boolean includeScreenAttributes = true;
private DiskBufferingConfiguration diskBufferingConfiguration =
DiskBufferingConfiguration.builder().build();
private boolean networkChangeMonitoringEnabled = true;
private boolean anrDetectionEnabled = true;
private boolean slowRenderingDetectionEnabled = true;
private Duration slowRenderingDetectionPollInterval =
Expand Down Expand Up @@ -121,20 +120,6 @@ public OtelRumConfig setDiskBufferingConfiguration(
return this;
}

/**
* Sets the configuration so that network change monitoring, which is enabled by default, will
* not be started.
*/
public OtelRumConfig disableNetworkChangeMonitoring() {
networkChangeMonitoringEnabled = false;
return this;
}

/** Returns true if network change monitoring is enabled (default = true). */
public boolean isNetworkChangeMonitoringEnabled() {
return networkChangeMonitoringEnabled;
}

/** Returns true if ANR (application not responding) detection is enabled (default = true). */
public boolean isAnrDetectionEnabled() {
return anrDetectionEnabled;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.android.instrumentation.network;
package io.opentelemetry.android.internal.features.networkattrs;

import static io.opentelemetry.semconv.incubating.NetworkIncubatingAttributes.NETWORK_CARRIER_ICC;
import static io.opentelemetry.semconv.incubating.NetworkIncubatingAttributes.NETWORK_CARRIER_MCC;
Expand All @@ -13,13 +13,14 @@
import static io.opentelemetry.semconv.incubating.NetworkIncubatingAttributes.NETWORK_CONNECTION_TYPE;

import androidx.annotation.Nullable;
import io.opentelemetry.android.internal.services.network.data.CurrentNetwork;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.common.AttributesBuilder;

final class CurrentNetworkAttributesExtractor {
public final class CurrentNetworkAttributesExtractor {

Attributes extract(CurrentNetwork network) {
public Attributes extract(CurrentNetwork network) {
AttributesBuilder builder =
Attributes.builder()
.put(NETWORK_CONNECTION_TYPE, network.getState().getHumanName());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.android.instrumentation.network;
package io.opentelemetry.android.internal.features.networkattrs;

import io.opentelemetry.android.internal.services.network.CurrentNetworkProvider;
import io.opentelemetry.android.internal.services.network.data.CurrentNetwork;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.context.Context;
import io.opentelemetry.sdk.trace.ReadWriteSpan;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@

package io.opentelemetry.android.internal.services

import android.content.Context
import android.app.Application
import io.opentelemetry.android.internal.services.network.CurrentNetworkProvider
import io.opentelemetry.android.internal.services.periodicwork.PeriodicWorkService

/**
Expand All @@ -18,22 +19,25 @@ interface ServiceManager : Startable {

fun getPeriodicWorkService(): PeriodicWorkService

fun getCurrentNetworkProvider(): CurrentNetworkProvider

companion object {
private var instance: ServiceManager? = null

@JvmStatic
fun initialize(appContext: Context) {
fun initialize(application: Application) {
if (instance != null) {
return
}
instance =
ServiceManagerImpl(
listOf(
Preferences.create(appContext),
Preferences.create(application),
CacheStorage(
appContext,
application,
),
PeriodicWorkService(),
CurrentNetworkProvider.create(application),
),
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

package io.opentelemetry.android.internal.services

import io.opentelemetry.android.internal.services.network.CurrentNetworkProvider
import io.opentelemetry.android.internal.services.periodicwork.PeriodicWorkService
import java.util.Collections

Expand All @@ -31,6 +32,10 @@ internal class ServiceManagerImpl(services: List<Any>) : ServiceManager {
return getService(PeriodicWorkService::class.java)
}

override fun getCurrentNetworkProvider(): CurrentNetworkProvider {
return getService(CurrentNetworkProvider::class.java)
}

override fun start() {
for (service in services.values) {
if (service is Startable) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.android.internal.services.network;

import android.os.Build;
import android.telephony.TelephonyManager;
import androidx.annotation.RequiresApi;
import io.opentelemetry.android.internal.services.network.data.Carrier;

/**
* This class is internal and not for public use. Its APIs are unstable and can change at any time.
*/
@RequiresApi(api = Build.VERSION_CODES.P)
public class CarrierFinder {

private final TelephonyManager telephonyManager;

public CarrierFinder(TelephonyManager telephonyManager) {
this.telephonyManager = telephonyManager;
}

public Carrier get() {
int id = telephonyManager.getSimCarrierId();
String name = null;
String mobileCountryCode = null;
String mobileNetworkCode = null;
String isoCountryCode = null;
CharSequence simCarrierIdName = telephonyManager.getSimCarrierIdName();
if (validString(simCarrierIdName)) {
name = simCarrierIdName.toString();
}
String simOperator = telephonyManager.getSimOperator();
if (validString(simOperator) && simOperator.length() >= 5) {
mobileCountryCode = simOperator.substring(0, 3);
mobileNetworkCode = simOperator.substring(3);
}
String providedIsoCountryCode = telephonyManager.getSimCountryIso();
if (validString(providedIsoCountryCode)) {
isoCountryCode = providedIsoCountryCode;
}
return new Carrier(id, name, mobileCountryCode, mobileNetworkCode, isoCountryCode);
}

private boolean validString(CharSequence str) {
return !(str == null || str.length() == 0);
}
}
Loading

0 comments on commit 99f3189

Please sign in to comment.