Skip to content

Commit f9d51fa

Browse files
committed
Adapt new MessagingAttributesExtractor and updated MessagingSpanNameExtractor in instrumenters
1 parent 3ecd05d commit f9d51fa

File tree

32 files changed

+344
-85
lines changed

32 files changed

+344
-85
lines changed

instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/messaging/MessagingAttributesExtractor.java

+1
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ public void onEnd(
189189
* any time.
190190
*/
191191
@Override
192+
@SuppressWarnings("deprecation") // using deprecated semconv
192193
public SpanKey internalGetSpanKey() {
193194
if (operation == null) {
194195
return null;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.api.incubator.semconv.messaging;
7+
8+
import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_PEER_ADDRESS;
9+
import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_PEER_PORT;
10+
import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS;
11+
import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT;
12+
13+
import io.opentelemetry.api.common.AttributesBuilder;
14+
import io.opentelemetry.context.Context;
15+
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
16+
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
17+
import javax.annotation.Nullable;
18+
19+
public final class MessagingNetworkAttributesExtractor<REQUEST, RESPONSE>
20+
implements AttributesExtractor<REQUEST, RESPONSE> {
21+
22+
/**
23+
* Creates the network attributes extractor.
24+
*
25+
* @see InstrumenterBuilder#addAttributesExtractor(AttributesExtractor)
26+
*/
27+
public static <REQUEST, RESPONSE> MessagingNetworkAttributesExtractor<REQUEST, RESPONSE> create(
28+
MessagingNetworkAttributesGetter<REQUEST, RESPONSE> getter) {
29+
return new MessagingNetworkAttributesExtractor<>(getter);
30+
}
31+
32+
private final MessagingNetworkAttributesGetter<REQUEST, RESPONSE> getter;
33+
34+
MessagingNetworkAttributesExtractor(MessagingNetworkAttributesGetter<REQUEST, RESPONSE> getter) {
35+
this.getter = getter;
36+
}
37+
38+
@Override
39+
public void onStart(AttributesBuilder attributes, Context parentContext, REQUEST request) {
40+
attributes.put(NETWORK_PEER_ADDRESS, getter.getNetworkPeerAddress(request, null));
41+
attributes.put(NETWORK_PEER_PORT, getter.getNetworkPeerPort(request, null));
42+
43+
attributes.put(SERVER_ADDRESS, getter.getServerAddress(request));
44+
attributes.put(SERVER_PORT, getter.getServerPort(request));
45+
}
46+
47+
@Override
48+
public void onEnd(
49+
AttributesBuilder attributes,
50+
Context context,
51+
REQUEST request,
52+
@Nullable RESPONSE response,
53+
@Nullable Throwable error) {}
54+
}
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.semconv.messaging;
7+
8+
import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesGetter;
9+
import io.opentelemetry.instrumentation.api.semconv.network.internal.InetSocketAddressUtil;
10+
import java.net.InetSocketAddress;
11+
import javax.annotation.Nullable;
12+
13+
public interface MessagingNetworkAttributesGetter<REQUEST, RESPONSE>
14+
extends ServerAttributesGetter<REQUEST> {
15+
16+
@Nullable
17+
default InetSocketAddress getNetworkPeerInetSocketAddress(
18+
REQUEST request, @Nullable RESPONSE response) {
19+
return null;
20+
}
21+
22+
@Nullable
23+
default String getNetworkPeerAddress(REQUEST request, @Nullable RESPONSE response) {
24+
return InetSocketAddressUtil.getIpAddress(getNetworkPeerInetSocketAddress(request, response));
25+
}
26+
27+
@Nullable
28+
default Integer getNetworkPeerPort(REQUEST request, @Nullable RESPONSE response) {
29+
return InetSocketAddressUtil.getPort(getNetworkPeerInetSocketAddress(request, response));
30+
}
31+
}

instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkInstrumenterFactory.java

+17-7
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package io.opentelemetry.instrumentation.awssdk.v1_11;
77

8+
import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableMessagingSemconv;
89
import static java.util.Collections.emptyList;
910
import static java.util.Collections.singletonList;
1011

@@ -18,13 +19,15 @@
1819
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessageOperation;
1920
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesExtractor;
2021
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesGetter;
22+
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingNetworkAttributesExtractor;
2123
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingSpanNameExtractor;
2224
import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcClientAttributesExtractor;
2325
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
2426
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
2527
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
2628
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
2729
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
30+
import io.opentelemetry.instrumentation.api.internal.SemconvStability;
2831
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractor;
2932
import java.util.ArrayList;
3033
import java.util.Arrays;
@@ -44,6 +47,9 @@ final class AwsSdkInstrumenterFactory {
4447
private static final AwsSdkAttributesExtractor sdkAttributesExtractor =
4548
new AwsSdkAttributesExtractor();
4649
private static final SnsAttributesExtractor snsAttributesExtractor = new SnsAttributesExtractor();
50+
private static final MessagingNetworkAttributesExtractor<Request<?>, Response<?>>
51+
messagingNetworkAttributesExtractor =
52+
MessagingNetworkAttributesExtractor.create(SqsAttributesGetter.INSTANCE);
4753

4854
private static final List<AttributesExtractor<Request<?>, Response<?>>>
4955
defaultAttributesExtractors = createAttributesExtractors(false);
@@ -75,7 +81,8 @@ private static List<AttributesExtractor<Request<?>, Response<?>>> createAttribut
7581
httpAttributesExtractor,
7682
rpcAttributesExtractor,
7783
snsAttributesExtractor,
78-
sdkAttributesExtractor));
84+
sdkAttributesExtractor,
85+
messagingNetworkAttributesExtractor));
7986
if (includeExperimental) {
8087
extractors.add(experimentalAttributesExtractor);
8188
}
@@ -113,11 +120,11 @@ Instrumenter<SqsReceiveRequest, Response<?>> consumerReceiveInstrumenter() {
113120

114121
return createInstrumenter(
115122
openTelemetry,
116-
MessagingSpanNameExtractor.create(getter, operation),
123+
MessagingSpanNameExtractor.create(getter, operation, getter),
117124
SpanKindExtractor.alwaysConsumer(),
118125
toSqsRequestExtractors(attributesExtractors()),
119126
singletonList(messagingAttributeExtractor),
120-
messagingReceiveInstrumentationEnabled);
127+
messagingReceiveInstrumentationEnabled || SemconvStability.emitStableMessagingSemconv());
121128
}
122129

123130
Instrumenter<SqsProcessRequest, Response<?>> consumerProcessInstrumenter() {
@@ -130,11 +137,11 @@ Instrumenter<SqsProcessRequest, Response<?>> consumerProcessInstrumenter() {
130137
Instrumenter.<SqsProcessRequest, Response<?>>builder(
131138
openTelemetry,
132139
INSTRUMENTATION_NAME,
133-
MessagingSpanNameExtractor.create(getter, operation))
140+
MessagingSpanNameExtractor.create(getter, operation, getter))
134141
.addAttributesExtractors(toSqsRequestExtractors(attributesExtractors()))
135142
.addAttributesExtractor(messagingAttributeExtractor);
136143

137-
if (messagingReceiveInstrumentationEnabled) {
144+
if (messagingReceiveInstrumentationEnabled || SemconvStability.emitStableMessagingSemconv()) {
138145
builder.addSpanLinksExtractor(
139146
(spanLinks, parentContext, request) -> {
140147
Context extracted =
@@ -173,15 +180,18 @@ public void onEnd(
173180
return result;
174181
}
175182

183+
@SuppressWarnings("deprecation") // using deprecated semconv
176184
Instrumenter<Request<?>, Response<?>> producerInstrumenter() {
177-
MessageOperation operation = MessageOperation.PUBLISH;
185+
MessageOperation operation =
186+
emitStableMessagingSemconv() ? MessageOperation.SEND : MessageOperation.PUBLISH;
187+
;
178188
SqsAttributesGetter getter = SqsAttributesGetter.INSTANCE;
179189
AttributesExtractor<Request<?>, Response<?>> messagingAttributeExtractor =
180190
messagingAttributesExtractor(getter, operation);
181191

182192
return createInstrumenter(
183193
openTelemetry,
184-
MessagingSpanNameExtractor.create(getter, operation),
194+
MessagingSpanNameExtractor.create(getter, operation, getter),
185195
SpanKindExtractor.alwaysProducer(),
186196
attributesExtractors(),
187197
singletonList(messagingAttributeExtractor),

instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsAttributesGetter.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,15 @@
88
import com.amazonaws.Request;
99
import com.amazonaws.Response;
1010
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesGetter;
11+
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingNetworkAttributesGetter;
1112
import java.util.Collections;
1213
import java.util.List;
1314
import javax.annotation.Nullable;
1415

15-
enum SqsAttributesGetter implements MessagingAttributesGetter<Request<?>, Response<?>> {
16+
enum SqsAttributesGetter
17+
implements
18+
MessagingAttributesGetter<Request<?>, Response<?>>,
19+
MessagingNetworkAttributesGetter<Request<?>, Response<?>> {
1620
INSTANCE;
1721

1822
// copied from MessagingIncubatingAttributes.MessagingSystemIncubatingValues

instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsProcessRequestAttributesGetter.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,15 @@
77

88
import com.amazonaws.Response;
99
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesGetter;
10+
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingNetworkAttributesGetter;
1011
import java.util.Collections;
1112
import java.util.List;
1213
import javax.annotation.Nullable;
1314

1415
enum SqsProcessRequestAttributesGetter
15-
implements MessagingAttributesGetter<SqsProcessRequest, Response<?>> {
16+
implements
17+
MessagingAttributesGetter<SqsProcessRequest, Response<?>>,
18+
MessagingNetworkAttributesGetter<SqsProcessRequest, Response<?>> {
1619
INSTANCE;
1720

1821
// copied from MessagingIncubatingAttributes.MessagingSystemIncubatingValues

instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsReceiveRequestAttributesGetter.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,16 @@
77

88
import com.amazonaws.Response;
99
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesGetter;
10+
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingNetworkAttributesGetter;
1011
import java.util.List;
1112
import java.util.stream.Collectors;
1213
import java.util.stream.StreamSupport;
1314
import javax.annotation.Nullable;
1415

1516
enum SqsReceiveRequestAttributesGetter
16-
implements MessagingAttributesGetter<SqsReceiveRequest, Response<?>> {
17+
implements
18+
MessagingAttributesGetter<SqsReceiveRequest, Response<?>>,
19+
MessagingNetworkAttributesGetter<SqsReceiveRequest, Response<?>> {
1720
INSTANCE;
1821

1922
// copied from MessagingIncubatingAttributes.MessagingSystemIncubatingValues

instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/AwsSdkInstrumenterFactory.java

+17-7
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package io.opentelemetry.instrumentation.awssdk.v2_2.internal;
77

8+
import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableMessagingSemconv;
89
import static java.util.Collections.emptyList;
910
import static java.util.Collections.singletonList;
1011

@@ -16,13 +17,15 @@
1617
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessageOperation;
1718
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesExtractor;
1819
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesGetter;
20+
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingNetworkAttributesExtractor;
1921
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingSpanNameExtractor;
2022
import io.opentelemetry.instrumentation.api.incubator.semconv.rpc.RpcClientAttributesExtractor;
2123
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
2224
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
2325
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
2426
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
2527
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
28+
import io.opentelemetry.instrumentation.api.internal.SemconvStability;
2629
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractor;
2730
import java.util.ArrayList;
2831
import java.util.Arrays;
@@ -51,6 +54,10 @@ public final class AwsSdkInstrumenterFactory {
5154
httpClientSuppressionAttributesExtractor =
5255
new AwsSdkHttpClientSuppressionAttributesExtractor();
5356

57+
private static final MessagingNetworkAttributesExtractor<ExecutionAttributes, Response>
58+
messagingNetworkAttributesExtractor =
59+
MessagingNetworkAttributesExtractor.create(SqsAttributesGetter.INSTANCE);
60+
5461
private static final List<AttributesExtractor<ExecutionAttributes, Response>>
5562
defaultAttributesExtractors =
5663
Arrays.asList(rpcAttributesExtractor, httpClientSuppressionAttributesExtractor);
@@ -60,7 +67,8 @@ public final class AwsSdkInstrumenterFactory {
6067
Arrays.asList(
6168
rpcAttributesExtractor,
6269
experimentalAttributesExtractor,
63-
httpClientSuppressionAttributesExtractor);
70+
httpClientSuppressionAttributesExtractor,
71+
messagingNetworkAttributesExtractor);
6472

6573
private static final List<AttributesExtractor<ExecutionAttributes, Response>>
6674
defaultConsumerAttributesExtractors =
@@ -130,11 +138,11 @@ public Instrumenter<SqsReceiveRequest, Response> consumerReceiveInstrumenter() {
130138

131139
return createInstrumenter(
132140
openTelemetry,
133-
MessagingSpanNameExtractor.create(getter, operation),
141+
MessagingSpanNameExtractor.create(getter, operation, getter),
134142
SpanKindExtractor.alwaysConsumer(),
135143
toSqsRequestExtractors(consumerAttributesExtractors()),
136144
singletonList(messagingAttributeExtractor),
137-
messagingReceiveInstrumentationEnabled);
145+
messagingReceiveInstrumentationEnabled || SemconvStability.emitStableMessagingSemconv());
138146
}
139147

140148
public Instrumenter<SqsProcessRequest, Response> consumerProcessInstrumenter() {
@@ -145,11 +153,11 @@ public Instrumenter<SqsProcessRequest, Response> consumerProcessInstrumenter() {
145153
Instrumenter.<SqsProcessRequest, Response>builder(
146154
openTelemetry,
147155
INSTRUMENTATION_NAME,
148-
MessagingSpanNameExtractor.create(getter, operation))
156+
MessagingSpanNameExtractor.create(getter, operation, getter))
149157
.addAttributesExtractors(toSqsRequestExtractors(consumerAttributesExtractors()))
150158
.addAttributesExtractor(messagingAttributesExtractor(getter, operation));
151159

152-
if (messagingReceiveInstrumentationEnabled) {
160+
if (messagingReceiveInstrumentationEnabled || SemconvStability.emitStableMessagingSemconv()) {
153161
builder.addSpanLinksExtractor(
154162
(spanLinks, parentContext, request) -> {
155163
Context extracted =
@@ -189,15 +197,17 @@ public void onEnd(
189197
return result;
190198
}
191199

200+
@SuppressWarnings("deprecation") // using deprecated semconv
192201
public Instrumenter<ExecutionAttributes, Response> producerInstrumenter() {
193-
MessageOperation operation = MessageOperation.PUBLISH;
202+
MessageOperation operation =
203+
emitStableMessagingSemconv() ? MessageOperation.SEND : MessageOperation.PUBLISH;
194204
SqsAttributesGetter getter = SqsAttributesGetter.INSTANCE;
195205
AttributesExtractor<ExecutionAttributes, Response> messagingAttributeExtractor =
196206
messagingAttributesExtractor(getter, operation);
197207

198208
return createInstrumenter(
199209
openTelemetry,
200-
MessagingSpanNameExtractor.create(getter, operation),
210+
MessagingSpanNameExtractor.create(getter, operation, getter),
201211
SpanKindExtractor.alwaysProducer(),
202212
attributesExtractors(),
203213
singletonList(messagingAttributeExtractor),

instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/SqsAttributesGetter.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,18 @@
66
package io.opentelemetry.instrumentation.awssdk.v2_2.internal;
77

88
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesGetter;
9+
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingNetworkAttributesGetter;
910
import java.util.Collections;
1011
import java.util.List;
1112
import javax.annotation.Nullable;
1213
import software.amazon.awssdk.core.SdkRequest;
1314
import software.amazon.awssdk.core.SdkResponse;
1415
import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
1516

16-
enum SqsAttributesGetter implements MessagingAttributesGetter<ExecutionAttributes, Response> {
17+
enum SqsAttributesGetter
18+
implements
19+
MessagingAttributesGetter<ExecutionAttributes, Response>,
20+
MessagingNetworkAttributesGetter<ExecutionAttributes, Response> {
1721
INSTANCE;
1822

1923
// copied from MessagingIncubatingAttributes.MessagingSystemIncubatingValues

instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/SqsProcessRequestAttributesGetter.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@
66
package io.opentelemetry.instrumentation.awssdk.v2_2.internal;
77

88
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesGetter;
9+
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingNetworkAttributesGetter;
910
import java.util.Collections;
1011
import java.util.List;
1112
import javax.annotation.Nullable;
1213
import software.amazon.awssdk.core.SdkRequest;
1314

1415
enum SqsProcessRequestAttributesGetter
15-
implements MessagingAttributesGetter<SqsProcessRequest, Response> {
16+
implements
17+
MessagingAttributesGetter<SqsProcessRequest, Response>,
18+
MessagingNetworkAttributesGetter<SqsProcessRequest, Response> {
1619
INSTANCE;
1720

1821
// copied from MessagingIncubatingAttributes.MessagingSystemIncubatingValues

instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/SqsReceiveRequestAttributesGetter.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,17 @@
66
package io.opentelemetry.instrumentation.awssdk.v2_2.internal;
77

88
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesGetter;
9+
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingNetworkAttributesGetter;
910
import java.util.List;
1011
import java.util.stream.Collectors;
1112
import java.util.stream.StreamSupport;
1213
import javax.annotation.Nullable;
1314
import software.amazon.awssdk.core.SdkRequest;
1415

1516
enum SqsReceiveRequestAttributesGetter
16-
implements MessagingAttributesGetter<SqsReceiveRequest, Response> {
17+
implements
18+
MessagingAttributesGetter<SqsReceiveRequest, Response>,
19+
MessagingNetworkAttributesGetter<SqsReceiveRequest, Response> {
1720
INSTANCE;
1821

1922
// copied from MessagingIncubatingAttributes.MessagingSystemIncubatingValues

0 commit comments

Comments
 (0)