Skip to content

Commit e3de1da

Browse files
Alter FilteringSpanExporter to leverage common code from contrib (#1043)
* add opentelemetry-processors dependency to core module * Refactor FilteringSpanExporterBuilder to use InterceptableSpanExporter from contrib package * fix lint * Remove redundant else block Co-authored-by: jason plumb <75337021+breedx-splk@users.noreply.github.com> * fix lint --------- Co-authored-by: jason plumb <75337021+breedx-splk@users.noreply.github.com>
1 parent 5861998 commit e3de1da

4 files changed

Lines changed: 20 additions & 36 deletions

File tree

core/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ dependencies {
7575
implementation(libs.opentelemetry.instrumentation.api)
7676
implementation(libs.opentelemetry.semconv.incubating)
7777
implementation(libs.opentelemetry.diskBuffering)
78-
78+
implementation(libs.opentelemetry.processors)
7979
testImplementation(libs.opentelemetry.api.incubator)
8080
testImplementation(libs.androidx.test.core)
8181
testImplementation(libs.awaitility)

core/src/main/java/io/opentelemetry/android/export/FilteringSpanExporter.java

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -5,44 +5,12 @@
55

66
package io.opentelemetry.android.export;
77

8-
import io.opentelemetry.sdk.common.CompletableResultCode;
9-
import io.opentelemetry.sdk.trace.data.SpanData;
108
import io.opentelemetry.sdk.trace.export.SpanExporter;
11-
import java.util.Collection;
12-
import java.util.List;
13-
import java.util.function.Predicate;
14-
import java.util.stream.Collectors;
159

1610
/** An exporter that will filter (not export) spans that fail a predicate. */
17-
public class FilteringSpanExporter implements SpanExporter {
18-
19-
private final SpanExporter delegate;
20-
21-
private final Predicate<SpanData> spanRejecter;
11+
public class FilteringSpanExporter {
2212

2313
public static FilteringSpanExporterBuilder builder(SpanExporter delegate) {
2414
return new FilteringSpanExporterBuilder(delegate);
2515
}
26-
27-
FilteringSpanExporter(SpanExporter delegate, Predicate<SpanData> spanRejecter) {
28-
this.delegate = delegate;
29-
this.spanRejecter = spanRejecter;
30-
}
31-
32-
@Override
33-
public CompletableResultCode export(Collection<SpanData> spans) {
34-
List<SpanData> toExport =
35-
spans.stream().filter(spanRejecter.negate()).collect(Collectors.toList());
36-
return delegate.export(toExport);
37-
}
38-
39-
@Override
40-
public CompletableResultCode flush() {
41-
return delegate.flush();
42-
}
43-
44-
@Override
45-
public CompletableResultCode shutdown() {
46-
return delegate.shutdown();
47-
}
4816
}

core/src/main/java/io/opentelemetry/android/export/FilteringSpanExporterBuilder.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@
55

66
package io.opentelemetry.android.export;
77

8+
import androidx.annotation.Nullable;
89
import io.opentelemetry.api.common.AttributeKey;
910
import io.opentelemetry.api.common.Attributes;
11+
import io.opentelemetry.contrib.interceptor.InterceptableSpanExporter;
12+
import io.opentelemetry.contrib.interceptor.api.Interceptor;
1013
import io.opentelemetry.sdk.trace.data.SpanData;
1114
import io.opentelemetry.sdk.trace.export.SpanExporter;
1215
import java.util.Map;
@@ -16,6 +19,18 @@ public final class FilteringSpanExporterBuilder {
1619

1720
private final SpanExporter delegate;
1821
private Predicate<SpanData> predicate = x -> false;
22+
private final Interceptor<SpanData> interceptor =
23+
new Interceptor<SpanData>() {
24+
25+
@Nullable
26+
@Override
27+
public SpanData intercept(SpanData item) {
28+
if (predicate.test(item)) {
29+
return null;
30+
}
31+
return item;
32+
}
33+
};
1934

2035
FilteringSpanExporterBuilder(SpanExporter spanExporter) {
2136
this.delegate = spanExporter;
@@ -90,6 +105,6 @@ public FilteringSpanExporterBuilder rejectSpansWithAttributesMatching(
90105
}
91106

92107
public SpanExporter build() {
93-
return new FilteringSpanExporter(delegate, this.predicate);
108+
return new InterceptableSpanExporter(delegate, interceptor);
94109
}
95110
}

gradle/libs.versions.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ compose = "1.5.4"
1919
[libraries]
2020
opentelemetry-platform-alpha = { module = "io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha", version.ref = "opentelemetry-instrumentation-alpha" }
2121
opentelemetry-platform = { module = "io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom" }
22-
androidx-navigation-fragment = { group = "androidx.navigation", name = "navigation-fragment", version.ref = "androidx-navigation"}
22+
androidx-navigation-fragment = { group = "androidx.navigation", name = "navigation-fragment", version.ref = "androidx-navigation" }
2323
androidx-navigation-runtime-ktx = { group = "androidx.navigation", name = "navigation-runtime-ktx", version.ref = "androidx-navigation" }
2424
androidx-core = "androidx.core:core:1.16.0"
2525
androidx-annotation = "androidx.annotation:annotation:1.9.1"
@@ -40,6 +40,7 @@ opentelemetry-sdk = { module = "io.opentelemetry:opentelemetry-sdk" }
4040
opentelemetry-context = { module = "io.opentelemetry:opentelemetry-context" }
4141
opentelemetry-exporter-logging = { module = "io.opentelemetry:opentelemetry-exporter-logging" }
4242
opentelemetry-diskBuffering = { module = "io.opentelemetry.contrib:opentelemetry-disk-buffering", version.ref = "opentelemetry-contrib" }
43+
opentelemetry-processors = { module = "io.opentelemetry.contrib:opentelemetry-processors", version.ref = "opentelemetry-contrib" }
4344
opentelemetry-exporter-otlp = { module = "io.opentelemetry:opentelemetry-exporter-otlp" }
4445
volley = "com.android.volley:volley:1.2.1"
4546
auto-service-annotations = { module = "com.google.auto.service:auto-service-annotations", version.ref = "autoService" }

0 commit comments

Comments
 (0)