Skip to content

Commit e7d8de3

Browse files
authored
Move customizer api to incubator module (#9)
1 parent 159e53d commit e7d8de3

File tree

13 files changed

+531
-150
lines changed

13 files changed

+531
-150
lines changed
Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,2 @@
11
Comparing source compatibility of opentelemetry-instrumentation-api-2.17.0-SNAPSHOT.jar against opentelemetry-instrumentation-api-2.16.0.jar
2-
*** MODIFIED CLASS: PUBLIC FINAL io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder (not serializable)
3-
=== CLASS FILE FORMAT VERSION: 52.0 <- 52.0
4-
GENERIC TEMPLATES: === REQUEST:java.lang.Object, === RESPONSE:java.lang.Object
5-
*** MODIFIED FIELD: PUBLIC (<- PACKAGE_PROTECTED) NON_FINAL (<- FINAL) io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor<? super REQUEST><? super REQUEST> spanNameExtractor
2+
No changes.

instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/InstrumenterCustomizer.java renamed to instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/instrumenter/InstrumenterCustomizer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6-
package io.opentelemetry.instrumentation.api.internal;
6+
package io.opentelemetry.instrumentation.api.incubator.instrumenter;
77

88
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
99
import io.opentelemetry.instrumentation.api.instrumenter.ContextCustomizer;
Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6-
package io.opentelemetry.instrumentation.api.internal;
6+
package io.opentelemetry.instrumentation.api.incubator.instrumenter;
77

88
/**
99
* A service provider interface (SPI) for customizing instrumentation behavior.
@@ -13,14 +13,6 @@
1313
*/
1414
public interface InstrumenterCustomizerProvider {
1515

16-
/**
17-
* Returns a predicate that matches the instrumentation name for which this provider is
18-
* applicable.
19-
*
20-
* @return a predicate that matches the instrumentation name for which this provider is applicable
21-
*/
22-
String getInstrumentationName();
23-
2416
/**
2517
* Customizes the given instrumenter.
2618
*

instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/InstrumenterCustomizerImpl.java renamed to instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/instrumenter/internal/InstrumenterCustomizerImpl.java

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,62 +3,62 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6-
package io.opentelemetry.instrumentation.api.internal;
6+
package io.opentelemetry.instrumentation.api.incubator.instrumenter.internal;
77

8+
import io.opentelemetry.instrumentation.api.incubator.instrumenter.InstrumenterCustomizer;
89
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
910
import io.opentelemetry.instrumentation.api.instrumenter.ContextCustomizer;
10-
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
1111
import io.opentelemetry.instrumentation.api.instrumenter.OperationMetrics;
1212
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
13+
import io.opentelemetry.instrumentation.api.internal.InternalInstrumenterCustomizer;
1314
import java.util.function.Function;
1415

1516
/**
1617
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
1718
* any time.
1819
*/
19-
public abstract class InstrumenterCustomizerImpl implements InstrumenterCustomizer {
20+
@SuppressWarnings({"unchecked", "rawtypes"})
21+
public final class InstrumenterCustomizerImpl implements InstrumenterCustomizer {
22+
private final InternalInstrumenterCustomizer customizer;
2023

21-
private final InstrumenterBuilder<?, ?> builder;
24+
public InstrumenterCustomizerImpl(InternalInstrumenterCustomizer customizer) {
25+
this.customizer = customizer;
26+
}
2227

23-
public InstrumenterCustomizerImpl(InstrumenterBuilder<?, ?> builder) {
24-
this.builder = builder;
28+
@Override
29+
public String getInstrumentationName() {
30+
return customizer.getInstrumentationName();
2531
}
2632

2733
@Override
28-
@SuppressWarnings("unchecked")
2934
public InstrumenterCustomizer addAttributesExtractor(AttributesExtractor<?, ?> extractor) {
30-
builder.addAttributesExtractor((AttributesExtractor<Object, Object>) extractor);
35+
customizer.addAttributesExtractor(extractor);
3136
return this;
3237
}
3338

3439
@Override
35-
@SuppressWarnings("unchecked")
3640
public InstrumenterCustomizer addAttributesExtractors(
3741
Iterable<? extends AttributesExtractor<?, ?>> extractors) {
38-
builder.addAttributesExtractors((Iterable<AttributesExtractor<Object, Object>>) extractors);
42+
customizer.addAttributesExtractors(extractors);
3943
return this;
4044
}
4145

4246
@Override
4347
public InstrumenterCustomizer addOperationMetrics(OperationMetrics operationMetrics) {
44-
builder.addOperationMetrics(operationMetrics);
48+
customizer.addOperationMetrics(operationMetrics);
4549
return this;
4650
}
4751

4852
@Override
49-
@SuppressWarnings("unchecked")
5053
public InstrumenterCustomizer addContextCustomizer(ContextCustomizer<?> customizer) {
51-
builder.addContextCustomizer((ContextCustomizer<Object>) customizer);
54+
this.customizer.addContextCustomizer(customizer);
5255
return this;
5356
}
5457

5558
@Override
56-
@SuppressWarnings("unchecked")
5759
public InstrumenterCustomizer setSpanNameExtractor(
5860
Function<SpanNameExtractor<?>, SpanNameExtractor<?>> spanNameExtractorTransformer) {
59-
builder.spanNameExtractor =
60-
(SpanNameExtractor<? super Object>)
61-
spanNameExtractorTransformer.apply(builder.spanNameExtractor);
62-
return this;
61+
customizer.setSpanNameExtractor(spanNameExtractorTransformer);
62+
return null;
6363
}
6464
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.api.incubator.instrumenter.internal;
7+
8+
import io.opentelemetry.instrumentation.api.incubator.instrumenter.InstrumenterCustomizerProvider;
9+
import io.opentelemetry.instrumentation.api.internal.InternalInstrumenterCustomizerProvider;
10+
import io.opentelemetry.instrumentation.api.internal.InternalInstrumenterCustomizerUtil;
11+
import io.opentelemetry.instrumentation.api.internal.ServiceLoaderUtil;
12+
import java.util.ArrayList;
13+
import java.util.List;
14+
15+
/**
16+
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
17+
* any time.
18+
*/
19+
public final class InstrumenterCustomizerUtil {
20+
21+
static {
22+
List<InternalInstrumenterCustomizerProvider> providers = new ArrayList<>();
23+
for (InstrumenterCustomizerProvider provider :
24+
ServiceLoaderUtil.load(InstrumenterCustomizerProvider.class)) {
25+
providers.add(new InternalInstrumenterCustomizerProviderImpl(provider));
26+
}
27+
InternalInstrumenterCustomizerUtil.setInstrumenterCustomizerProviders(providers);
28+
}
29+
30+
private InstrumenterCustomizerUtil() {}
31+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.api.incubator.instrumenter.internal;
7+
8+
import io.opentelemetry.instrumentation.api.incubator.instrumenter.InstrumenterCustomizerProvider;
9+
import io.opentelemetry.instrumentation.api.internal.InternalInstrumenterCustomizer;
10+
import io.opentelemetry.instrumentation.api.internal.InternalInstrumenterCustomizerProvider;
11+
12+
/**
13+
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
14+
* any time.
15+
*/
16+
public final class InternalInstrumenterCustomizerProviderImpl
17+
implements InternalInstrumenterCustomizerProvider {
18+
private final InstrumenterCustomizerProvider provider;
19+
20+
public InternalInstrumenterCustomizerProviderImpl(InstrumenterCustomizerProvider provider) {
21+
this.provider = provider;
22+
}
23+
24+
@Override
25+
public void customize(InternalInstrumenterCustomizer<?, ?> customizer) {
26+
provider.customize(new InstrumenterCustomizerImpl(customizer));
27+
}
28+
}

instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/InstrumenterBuilder.java

Lines changed: 49 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,17 @@
2222
import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
2323
import io.opentelemetry.instrumentation.api.internal.EmbeddedInstrumentationProperties;
2424
import io.opentelemetry.instrumentation.api.internal.InstrumenterBuilderAccess;
25-
import io.opentelemetry.instrumentation.api.internal.InstrumenterCustomizer;
26-
import io.opentelemetry.instrumentation.api.internal.InstrumenterCustomizerImpl;
27-
import io.opentelemetry.instrumentation.api.internal.InstrumenterCustomizerProvider;
2825
import io.opentelemetry.instrumentation.api.internal.InstrumenterUtil;
26+
import io.opentelemetry.instrumentation.api.internal.InternalInstrumenterCustomizer;
27+
import io.opentelemetry.instrumentation.api.internal.InternalInstrumenterCustomizerProvider;
28+
import io.opentelemetry.instrumentation.api.internal.InternalInstrumenterCustomizerUtil;
2929
import io.opentelemetry.instrumentation.api.internal.SchemaUrlProvider;
30-
import io.opentelemetry.instrumentation.api.internal.ServiceLoaderUtil;
3130
import io.opentelemetry.instrumentation.api.internal.SpanKey;
3231
import io.opentelemetry.instrumentation.api.internal.SpanKeyProvider;
3332
import java.util.ArrayList;
34-
import java.util.HashMap;
3533
import java.util.List;
36-
import java.util.Map;
3734
import java.util.Set;
35+
import java.util.function.Function;
3836
import java.util.logging.Logger;
3937
import java.util.stream.Collectors;
4038
import java.util.stream.Stream;
@@ -57,7 +55,7 @@ public final class InstrumenterBuilder<REQUEST, RESPONSE> {
5755

5856
final OpenTelemetry openTelemetry;
5957
final String instrumentationName;
60-
public SpanNameExtractor<? super REQUEST> spanNameExtractor;
58+
SpanNameExtractor<? super REQUEST> spanNameExtractor;
6159

6260
final List<SpanLinksExtractor<? super REQUEST>> spanLinksExtractors = new ArrayList<>();
6361
final List<AttributesExtractor<? super REQUEST, ? super RESPONSE>> attributesExtractors =
@@ -75,22 +73,6 @@ public final class InstrumenterBuilder<REQUEST, RESPONSE> {
7573
boolean propagateOperationListenersToOnEnd = false;
7674
boolean enabled = true;
7775

78-
private static final Map<String, List<InstrumenterCustomizerProvider>>
79-
INSTRUMENTATION_CUSTOMIZER_MAP = new HashMap<>();
80-
81-
static {
82-
List<InstrumenterCustomizerProvider> providers =
83-
ServiceLoaderUtil.load(InstrumenterCustomizerProvider.class);
84-
for (InstrumenterCustomizerProvider provider : providers) {
85-
String instrumentationName = provider.getInstrumentationName();
86-
if (instrumentationName != null) {
87-
INSTRUMENTATION_CUSTOMIZER_MAP
88-
.computeIfAbsent(instrumentationName, k -> new ArrayList<>())
89-
.add(provider);
90-
}
91-
}
92-
}
93-
9476
InstrumenterBuilder(
9577
OpenTelemetry openTelemetry,
9678
String instrumentationName,
@@ -304,22 +286,7 @@ private Instrumenter<REQUEST, RESPONSE> buildInstrumenter(
304286
InstrumenterConstructor<REQUEST, RESPONSE> constructor,
305287
SpanKindExtractor<? super REQUEST> spanKindExtractor) {
306288

307-
List<InstrumenterCustomizerProvider> providers =
308-
INSTRUMENTATION_CUSTOMIZER_MAP.get(instrumentationName);
309-
310-
if (providers != null && !providers.isEmpty()) {
311-
InstrumenterCustomizer customizer =
312-
new InstrumenterCustomizerImpl(this) {
313-
@Override
314-
public String getInstrumentationName() {
315-
return instrumentationName;
316-
}
317-
};
318-
319-
for (InstrumenterCustomizerProvider provider : providers) {
320-
provider.customize(customizer);
321-
}
322-
}
289+
applyCustomizers(this);
323290

324291
this.spanKindExtractor = spanKindExtractor;
325292
return constructor.create(this);
@@ -415,6 +382,49 @@ private void propagateOperationListenersToOnEnd() {
415382
propagateOperationListenersToOnEnd = true;
416383
}
417384

385+
private static <REQUEST, RESPONSE> void applyCustomizers(
386+
InstrumenterBuilder<REQUEST, RESPONSE> builder) {
387+
for (InternalInstrumenterCustomizerProvider provider :
388+
InternalInstrumenterCustomizerUtil.getInstrumenterCustomizerProviders()) {
389+
provider.customize(
390+
new InternalInstrumenterCustomizer<REQUEST, RESPONSE>() {
391+
@Override
392+
public String getInstrumentationName() {
393+
return builder.instrumentationName;
394+
}
395+
396+
@Override
397+
public void addAttributesExtractor(AttributesExtractor<REQUEST, RESPONSE> extractor) {
398+
builder.addAttributesExtractor(extractor);
399+
}
400+
401+
@Override
402+
public void addAttributesExtractors(
403+
Iterable<? extends AttributesExtractor<REQUEST, RESPONSE>> extractors) {
404+
builder.addAttributesExtractors(extractors);
405+
}
406+
407+
@Override
408+
public void addOperationMetrics(OperationMetrics operationMetrics) {
409+
builder.addOperationMetrics(operationMetrics);
410+
}
411+
412+
@Override
413+
public void addContextCustomizer(ContextCustomizer<REQUEST> customizer) {
414+
builder.addContextCustomizer(customizer);
415+
}
416+
417+
@Override
418+
public void setSpanNameExtractor(
419+
Function<SpanNameExtractor<? super REQUEST>, SpanNameExtractor<? super REQUEST>>
420+
spanNameExtractorTransformer) {
421+
builder.spanNameExtractor =
422+
spanNameExtractorTransformer.apply(builder.spanNameExtractor);
423+
}
424+
});
425+
}
426+
}
427+
418428
private interface InstrumenterConstructor<RQ, RS> {
419429
Instrumenter<RQ, RS> create(InstrumenterBuilder<RQ, RS> builder);
420430

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.api.internal;
7+
8+
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
9+
import io.opentelemetry.instrumentation.api.instrumenter.ContextCustomizer;
10+
import io.opentelemetry.instrumentation.api.instrumenter.OperationMetrics;
11+
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
12+
import java.util.function.Function;
13+
14+
/**
15+
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
16+
* any time.
17+
*/
18+
public interface InternalInstrumenterCustomizer<REQUEST, RESPONSE> {
19+
20+
String getInstrumentationName();
21+
22+
void addAttributesExtractor(AttributesExtractor<REQUEST, RESPONSE> extractor);
23+
24+
void addAttributesExtractors(
25+
Iterable<? extends AttributesExtractor<REQUEST, RESPONSE>> extractors);
26+
27+
void addOperationMetrics(OperationMetrics operationMetrics);
28+
29+
void addContextCustomizer(ContextCustomizer<REQUEST> customizer);
30+
31+
void setSpanNameExtractor(
32+
Function<SpanNameExtractor<? super REQUEST>, SpanNameExtractor<? super REQUEST>>
33+
spanNameExtractorTransformer);
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.api.internal;
7+
8+
/**
9+
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
10+
* any time.
11+
*/
12+
public interface InternalInstrumenterCustomizerProvider {
13+
14+
void customize(InternalInstrumenterCustomizer<?, ?> customizer);
15+
}

0 commit comments

Comments
 (0)