Skip to content

Commit a530c9c

Browse files
authored
Config for disabling default instrumentations (#1273)
* Allowing to disable default instrumentations with the initializer api * apiDump * Providing enabled setter * Renaming enabled setter * apiDump * apiDump
1 parent eca9ad5 commit a530c9c

4 files changed

Lines changed: 122 additions & 20 deletions

File tree

android-agent/api/android-agent.api

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,24 @@ public final class io/opentelemetry/android/agent/OpenTelemetryRumInitializer {
77
public static synthetic fun initialize$default (Landroid/app/Application;Ljava/lang/String;Ljava/util/Map;Lio/opentelemetry/android/agent/connectivity/EndpointConnectivity;Lio/opentelemetry/android/agent/connectivity/EndpointConnectivity;Lio/opentelemetry/android/agent/connectivity/EndpointConnectivity;Lio/opentelemetry/android/config/OtelRumConfig;Lio/opentelemetry/android/agent/session/SessionConfig;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lio/opentelemetry/android/OpenTelemetryRum;
88
}
99

10-
public final class io/opentelemetry/android/agent/OpenTelemetryRumInitializer$ActivityLifecycleConfiguration : io/opentelemetry/android/agent/OpenTelemetryRumInitializer$ScreenLifecycleConfigurable {
10+
public final class io/opentelemetry/android/agent/OpenTelemetryRumInitializer$ActivityLifecycleConfiguration : io/opentelemetry/android/agent/OpenTelemetryRumInitializer$CanBeEnabledAndDisabled, io/opentelemetry/android/agent/OpenTelemetryRumInitializer$ScreenLifecycleConfigurable {
11+
public fun enabled (Z)V
1112
public fun screenNameExtractor (Lio/opentelemetry/android/instrumentation/common/ScreenNameExtractor;)V
1213
public fun tracerCustomizer (Lkotlin/jvm/functions/Function1;)V
1314
}
1415

15-
public final class io/opentelemetry/android/agent/OpenTelemetryRumInitializer$AnrReporterConfiguration : io/opentelemetry/android/agent/OpenTelemetryRumInitializer$WithEventAttributes {
16+
public final class io/opentelemetry/android/agent/OpenTelemetryRumInitializer$AnrReporterConfiguration : io/opentelemetry/android/agent/OpenTelemetryRumInitializer$CanBeEnabledAndDisabled, io/opentelemetry/android/agent/OpenTelemetryRumInitializer$WithEventAttributes {
1617
public fun addAttributesExtractor (Lio/opentelemetry/android/instrumentation/common/EventAttributesExtractor;)V
18+
public fun enabled (Z)V
1719
}
1820

19-
public final class io/opentelemetry/android/agent/OpenTelemetryRumInitializer$CrashReporterConfiguration : io/opentelemetry/android/agent/OpenTelemetryRumInitializer$WithEventAttributes {
21+
public final class io/opentelemetry/android/agent/OpenTelemetryRumInitializer$CrashReporterConfiguration : io/opentelemetry/android/agent/OpenTelemetryRumInitializer$CanBeEnabledAndDisabled, io/opentelemetry/android/agent/OpenTelemetryRumInitializer$WithEventAttributes {
2022
public fun addAttributesExtractor (Lio/opentelemetry/android/instrumentation/common/EventAttributesExtractor;)V
23+
public fun enabled (Z)V
2124
}
2225

23-
public final class io/opentelemetry/android/agent/OpenTelemetryRumInitializer$FragmentLifecycleConfiguration : io/opentelemetry/android/agent/OpenTelemetryRumInitializer$ScreenLifecycleConfigurable {
26+
public final class io/opentelemetry/android/agent/OpenTelemetryRumInitializer$FragmentLifecycleConfiguration : io/opentelemetry/android/agent/OpenTelemetryRumInitializer$CanBeEnabledAndDisabled, io/opentelemetry/android/agent/OpenTelemetryRumInitializer$ScreenLifecycleConfigurable {
27+
public fun enabled (Z)V
2428
public fun screenNameExtractor (Lio/opentelemetry/android/instrumentation/common/ScreenNameExtractor;)V
2529
public fun tracerCustomizer (Lkotlin/jvm/functions/Function1;)V
2630
}
@@ -34,13 +38,15 @@ public final class io/opentelemetry/android/agent/OpenTelemetryRumInitializer$In
3438
public final fun slowRenderingReporter (Lkotlin/jvm/functions/Function1;)V
3539
}
3640

37-
public final class io/opentelemetry/android/agent/OpenTelemetryRumInitializer$NetworkMonitoringConfiguration {
41+
public final class io/opentelemetry/android/agent/OpenTelemetryRumInitializer$NetworkMonitoringConfiguration : io/opentelemetry/android/agent/OpenTelemetryRumInitializer$CanBeEnabledAndDisabled {
3842
public final fun addAttributesExtractor (Lio/opentelemetry/android/instrumentation/network/NetworkAttributesExtractor;)V
43+
public fun enabled (Z)V
3944
}
4045

41-
public final class io/opentelemetry/android/agent/OpenTelemetryRumInitializer$SlowRenderingReporterConfiguration {
46+
public final class io/opentelemetry/android/agent/OpenTelemetryRumInitializer$SlowRenderingReporterConfiguration : io/opentelemetry/android/agent/OpenTelemetryRumInitializer$CanBeEnabledAndDisabled {
4247
public final fun detectionPollInterval-LRDsOJo (J)V
4348
public final fun enableVerboseDebugLogging ()V
49+
public fun enabled (Z)V
4450
}
4551

4652
public abstract interface class io/opentelemetry/android/agent/connectivity/EndpointConnectivity {

android-agent/src/main/kotlin/io/opentelemetry/android/agent/OpenTelemetryRumInitializer.kt

Lines changed: 100 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ object OpenTelemetryRumInitializer {
7777
instrumentations: (InstrumentationConfiguration.() -> Unit)? = null,
7878
): OpenTelemetryRum {
7979
instrumentations?.let { configure ->
80-
InstrumentationConfiguration().configure()
80+
InstrumentationConfiguration(rumConfig).configure()
8181
}
8282
return OpenTelemetryRum
8383
.builder(application, rumConfig)
@@ -113,13 +113,31 @@ object OpenTelemetryRumInitializer {
113113
}
114114

115115
@InstrumentationConfigMarker
116-
class InstrumentationConfiguration internal constructor() {
117-
private val activity: ActivityLifecycleConfiguration by lazy { ActivityLifecycleConfiguration() }
118-
private val fragment: FragmentLifecycleConfiguration by lazy { FragmentLifecycleConfiguration() }
119-
private val anr: AnrReporterConfiguration by lazy { AnrReporterConfiguration() }
120-
private val crash: CrashReporterConfiguration by lazy { CrashReporterConfiguration() }
121-
private val networkMonitoring: NetworkMonitoringConfiguration by lazy { NetworkMonitoringConfiguration() }
122-
private val slowRendering: SlowRenderingReporterConfiguration by lazy { SlowRenderingReporterConfiguration() }
116+
class InstrumentationConfiguration internal constructor(
117+
config: OtelRumConfig,
118+
) {
119+
private val activity: ActivityLifecycleConfiguration by lazy {
120+
ActivityLifecycleConfiguration(
121+
config,
122+
)
123+
}
124+
private val fragment: FragmentLifecycleConfiguration by lazy {
125+
FragmentLifecycleConfiguration(
126+
config,
127+
)
128+
}
129+
private val anr: AnrReporterConfiguration by lazy { AnrReporterConfiguration(config) }
130+
private val crash: CrashReporterConfiguration by lazy { CrashReporterConfiguration(config) }
131+
private val networkMonitoring: NetworkMonitoringConfiguration by lazy {
132+
NetworkMonitoringConfiguration(
133+
config,
134+
)
135+
}
136+
private val slowRendering: SlowRenderingReporterConfiguration by lazy {
137+
SlowRenderingReporterConfiguration(
138+
config,
139+
)
140+
}
123141

124142
fun activity(configure: ActivityLifecycleConfiguration.() -> Unit) {
125143
activity.configure()
@@ -147,7 +165,10 @@ object OpenTelemetryRumInitializer {
147165
}
148166

149167
@InstrumentationConfigMarker
150-
class ActivityLifecycleConfiguration internal constructor() : ScreenLifecycleConfigurable {
168+
class ActivityLifecycleConfiguration internal constructor(
169+
private val config: OtelRumConfig,
170+
) : ScreenLifecycleConfigurable,
171+
CanBeEnabledAndDisabled {
151172
private val activityLifecycleInstrumentation: ActivityLifecycleInstrumentation by lazy {
152173
getInstrumentation()
153174
}
@@ -159,10 +180,21 @@ object OpenTelemetryRumInitializer {
159180
override fun screenNameExtractor(value: ScreenNameExtractor) {
160181
activityLifecycleInstrumentation.setScreenNameExtractor(value)
161182
}
183+
184+
override fun enabled(enabled: Boolean) {
185+
if (enabled) {
186+
config.allowInstrumentation(activityLifecycleInstrumentation.name)
187+
} else {
188+
config.suppressInstrumentation(activityLifecycleInstrumentation.name)
189+
}
190+
}
162191
}
163192

164193
@InstrumentationConfigMarker
165-
class FragmentLifecycleConfiguration internal constructor() : ScreenLifecycleConfigurable {
194+
class FragmentLifecycleConfiguration internal constructor(
195+
private val config: OtelRumConfig,
196+
) : ScreenLifecycleConfigurable,
197+
CanBeEnabledAndDisabled {
166198
private val fragmentLifecycleInstrumentation: FragmentLifecycleInstrumentation by lazy {
167199
getInstrumentation()
168200
}
@@ -174,37 +206,79 @@ object OpenTelemetryRumInitializer {
174206
override fun screenNameExtractor(value: ScreenNameExtractor) {
175207
fragmentLifecycleInstrumentation.setScreenNameExtractor(value)
176208
}
209+
210+
override fun enabled(enabled: Boolean) {
211+
if (enabled) {
212+
config.allowInstrumentation(fragmentLifecycleInstrumentation.name)
213+
} else {
214+
config.suppressInstrumentation(fragmentLifecycleInstrumentation.name)
215+
}
216+
}
177217
}
178218

179219
@InstrumentationConfigMarker
180-
class AnrReporterConfiguration internal constructor() : WithEventAttributes<Array<StackTraceElement>> {
220+
class AnrReporterConfiguration internal constructor(
221+
private val config: OtelRumConfig,
222+
) : WithEventAttributes<Array<StackTraceElement>>,
223+
CanBeEnabledAndDisabled {
181224
private val anrInstrumentation: AnrInstrumentation by lazy { getInstrumentation() }
182225

183226
override fun addAttributesExtractor(value: EventAttributesExtractor<Array<StackTraceElement>>) {
184227
anrInstrumentation.addAttributesExtractor(value)
185228
}
229+
230+
override fun enabled(enabled: Boolean) {
231+
if (enabled) {
232+
config.allowInstrumentation(anrInstrumentation.name)
233+
} else {
234+
config.suppressInstrumentation(anrInstrumentation.name)
235+
}
236+
}
186237
}
187238

188239
@InstrumentationConfigMarker
189-
class CrashReporterConfiguration internal constructor() : WithEventAttributes<CrashDetails> {
240+
class CrashReporterConfiguration internal constructor(
241+
private val config: OtelRumConfig,
242+
) : WithEventAttributes<CrashDetails>,
243+
CanBeEnabledAndDisabled {
190244
private val crashReporterInstrumentation: CrashReporterInstrumentation by lazy { getInstrumentation() }
191245

192246
override fun addAttributesExtractor(value: EventAttributesExtractor<CrashDetails>) {
193247
crashReporterInstrumentation.addAttributesExtractor(value)
194248
}
249+
250+
override fun enabled(enabled: Boolean) {
251+
if (enabled) {
252+
config.allowInstrumentation(crashReporterInstrumentation.name)
253+
} else {
254+
config.suppressInstrumentation(crashReporterInstrumentation.name)
255+
}
256+
}
195257
}
196258

197259
@InstrumentationConfigMarker
198-
class NetworkMonitoringConfiguration internal constructor() {
260+
class NetworkMonitoringConfiguration internal constructor(
261+
private val config: OtelRumConfig,
262+
) : CanBeEnabledAndDisabled {
199263
private val networkInstrumentation: NetworkChangeInstrumentation by lazy { getInstrumentation() }
200264

201265
fun addAttributesExtractor(value: NetworkAttributesExtractor) {
202266
networkInstrumentation.addAttributesExtractor(value)
203267
}
268+
269+
override fun enabled(enabled: Boolean) {
270+
if (enabled) {
271+
config.allowInstrumentation(networkInstrumentation.name)
272+
} else {
273+
config.suppressInstrumentation(networkInstrumentation.name)
274+
}
275+
}
204276
}
205277

206278
@InstrumentationConfigMarker
207-
class SlowRenderingReporterConfiguration internal constructor() {
279+
class SlowRenderingReporterConfiguration internal constructor(
280+
private val config: OtelRumConfig,
281+
) : CanBeEnabledAndDisabled {
208282
private val slowRenderingInstrumentation: SlowRenderingInstrumentation by lazy { getInstrumentation() }
209283

210284
fun detectionPollInterval(value: Duration) {
@@ -214,6 +288,14 @@ object OpenTelemetryRumInitializer {
214288
fun enableVerboseDebugLogging() {
215289
slowRenderingInstrumentation.enableVerboseDebugLogging()
216290
}
291+
292+
override fun enabled(enabled: Boolean) {
293+
if (enabled) {
294+
config.allowInstrumentation(slowRenderingInstrumentation.name)
295+
} else {
296+
config.suppressInstrumentation(slowRenderingInstrumentation.name)
297+
}
298+
}
217299
}
218300

219301
internal interface ScreenLifecycleConfigurable {
@@ -226,6 +308,10 @@ object OpenTelemetryRumInitializer {
226308
fun addAttributesExtractor(value: EventAttributesExtractor<T>)
227309
}
228310

311+
internal interface CanBeEnabledAndDisabled {
312+
fun enabled(enabled: Boolean)
313+
}
314+
229315
@DslMarker
230316
internal annotation class InstrumentationConfigMarker
231317

core/api/core.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ public final class io/opentelemetry/android/SessionIdRatioBasedSampler : io/open
5757

5858
public class io/opentelemetry/android/config/OtelRumConfig {
5959
public fun <init> ()V
60+
public fun allowInstrumentation (Ljava/lang/String;)Lio/opentelemetry/android/config/OtelRumConfig;
6061
public fun disableInstrumentationDiscovery ()Lio/opentelemetry/android/config/OtelRumConfig;
6162
public fun disableNetworkAttributes ()Lio/opentelemetry/android/config/OtelRumConfig;
6263
public fun disableScreenAttributes ()Lio/opentelemetry/android/config/OtelRumConfig;

core/src/main/java/io/opentelemetry/android/config/OtelRumConfig.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,15 @@ public OtelRumConfig suppressInstrumentation(String instrumentationName) {
144144
return this;
145145
}
146146

147+
/**
148+
* Removes an instrumentation name from the list of suppressed instrumentations.
149+
* Instrumentations that have been suppressed will not be installed at startup.
150+
*/
151+
public OtelRumConfig allowInstrumentation(String instrumentationName) {
152+
suppressedInstrumentations.remove(instrumentationName);
153+
return this;
154+
}
155+
147156
/** Returns false when the given instrumentation has been suppressed. True otherwise. */
148157
public boolean isSuppressed(String instrumentationName) {
149158
return suppressedInstrumentations.contains(instrumentationName);

0 commit comments

Comments
 (0)