Skip to content

Commit 2dd0c16

Browse files
committed
refactor: reduce the complexity of messaging-wrappers
1 parent 811d197 commit 2dd0c16

File tree

25 files changed

+450
-380
lines changed

25 files changed

+450
-380
lines changed

messaging-wrappers/README.md

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -150,25 +150,33 @@ Below is an example of how to initialize a messaging wrapper.
150150
```java
151151
public class Demo {
152152

153-
public static MessagingProcessWrapper<MyMessagingProcessRequest> createWrapper(
154-
OpenTelemetry openTelemetry,
155-
MyTextMapGetter textMapGetter,
156-
List<AttributesExtractor<MyMessagingProcessRequest, Void>> additionalExtractor) {
153+
public static MessagingProcessWrapper<MessagingProcessRequest> createWrapper(OpenTelemetry openTelemetry) {
157154

158-
return MessagingProcessWrapper.<MyMessagingProcessRequest>defaultBuilder()
155+
return MessagingProcessWrapper.<MessagingProcessRequest>defaultBuilder()
159156
.openTelemetry(openTelemetry)
160-
.textMapGetter(textMapGetter)
161-
.addAttributesExtractors(additionalExtractor)
157+
.textMapGetter(DefaultMessageTextMapGetter.create())
158+
.attributesExtractors(
159+
Collections.singletonList(
160+
MessagingAttributesExtractor.create(
161+
DefaultMessagingAttributesGetter.create(), MessageOperation.PROCESS)))
162162
.build();
163163
}
164164
}
165165

166166
public class MyMessagingProcessRequest implements MessagingProcessRequest {
167167
// your implementation here
168-
}
169168

170-
public class MyTextMapGetter implements TextMapGetter<MyMessagingProcessRequest> {
171-
// your implementation here
169+
@Override
170+
public List<String> getMessageHeader(String name) {
171+
// impl: how to get specific header from your message
172+
return Collections.singletonList(message.getHeaders().get(name));
173+
}
174+
175+
@Override
176+
public Collection<String> getAllMessageHeadersKey() {
177+
// impl: how to get all headers key set from your message
178+
return message.getHeaders().keySet();
179+
}
172180
}
173181
```
174182

messaging-wrappers/aliyun-mns-sdk/src/main/java/io/opentelemetry/contrib/messaging/wrappers/mns/MnsHelper.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,12 @@
99
import com.aliyun.mns.model.MessagePropertyValue;
1010
import com.aliyun.mns.model.MessageSystemPropertyName;
1111
import com.aliyun.mns.model.MessageSystemPropertyValue;
12-
import io.opentelemetry.contrib.messaging.wrappers.mns.semconv.MnsProcessRequest;
1312
import javax.annotation.Nullable;
1413

1514
public final class MnsHelper {
1615

17-
public static <REQUEST extends MnsProcessRequest>
18-
MnsProcessWrapperBuilder<REQUEST> processWrapperBuilder() {
19-
return new MnsProcessWrapperBuilder<>();
16+
public static MnsProcessWrapperBuilder processWrapperBuilder() {
17+
return new MnsProcessWrapperBuilder();
2018
}
2119

2220
@Nullable

messaging-wrappers/aliyun-mns-sdk/src/main/java/io/opentelemetry/contrib/messaging/wrappers/mns/MnsProcessWrapperBuilder.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,25 @@
55

66
package io.opentelemetry.contrib.messaging.wrappers.mns;
77

8-
import io.opentelemetry.contrib.messaging.wrappers.DefaultMessagingProcessWrapperBuilder;
8+
import io.opentelemetry.contrib.messaging.wrappers.MessagingProcessWrapperBuilder;
9+
import io.opentelemetry.contrib.messaging.wrappers.mns.semconv.MnsConsumerAttributesGetter;
910
import io.opentelemetry.contrib.messaging.wrappers.mns.semconv.MnsProcessRequest;
11+
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessageOperation;
12+
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesExtractor;
13+
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingSpanNameExtractor;
14+
import java.util.ArrayList;
1015

11-
public class MnsProcessWrapperBuilder<REQUEST extends MnsProcessRequest>
12-
extends DefaultMessagingProcessWrapperBuilder<REQUEST> {
16+
public class MnsProcessWrapperBuilder extends MessagingProcessWrapperBuilder<MnsProcessRequest> {
1317

1418
MnsProcessWrapperBuilder() {
1519
super();
1620
super.textMapGetter = MnsTextMapGetter.create();
21+
super.spanNameExtractor =
22+
MessagingSpanNameExtractor.create(
23+
MnsConsumerAttributesGetter.INSTANCE, MessageOperation.PROCESS);
24+
super.attributesExtractors = new ArrayList<>();
25+
super.attributesExtractors.add(
26+
MessagingAttributesExtractor.create(
27+
MnsConsumerAttributesGetter.INSTANCE, MessageOperation.PROCESS));
1728
}
1829
}

messaging-wrappers/aliyun-mns-sdk/src/main/java/io/opentelemetry/contrib/messaging/wrappers/mns/MnsTextMapGetter.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@
1919
import java.util.Map;
2020
import javax.annotation.Nullable;
2121

22-
public class MnsTextMapGetter<REQUEST extends MnsProcessRequest> implements TextMapGetter<REQUEST> {
22+
public class MnsTextMapGetter implements TextMapGetter<MnsProcessRequest> {
2323

24-
public static <REQUEST extends MnsProcessRequest> TextMapGetter<REQUEST> create() {
25-
return new MnsTextMapGetter<>();
24+
public static TextMapGetter<MnsProcessRequest> create() {
25+
return new MnsTextMapGetter();
2626
}
2727

2828
@Override
29-
public Iterable<String> keys(@Nullable REQUEST carrier) {
29+
public Iterable<String> keys(@Nullable MnsProcessRequest carrier) {
3030
if (carrier == null || carrier.getMessage() == null) {
3131
return emptyList();
3232
}
@@ -48,7 +48,7 @@ public Iterable<String> keys(@Nullable REQUEST carrier) {
4848

4949
@Nullable
5050
@Override
51-
public String get(@Nullable REQUEST carrier, String key) {
51+
public String get(@Nullable MnsProcessRequest carrier, String key) {
5252
if (carrier == null || carrier.getMessage() == null) {
5353
return null;
5454
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.contrib.messaging.wrappers.mns.semconv;
7+
8+
import io.opentelemetry.contrib.messaging.wrappers.mns.MnsHelper;
9+
import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesGetter;
10+
import java.util.Collections;
11+
import java.util.List;
12+
import javax.annotation.Nullable;
13+
14+
public enum MnsConsumerAttributesGetter
15+
implements MessagingAttributesGetter<MnsProcessRequest, Void> {
16+
INSTANCE;
17+
18+
@Override
19+
public String getSystem(MnsProcessRequest request) {
20+
return "smq";
21+
}
22+
23+
@Nullable
24+
@Override
25+
public String getDestination(MnsProcessRequest request) {
26+
return request.getDestination();
27+
}
28+
29+
@Nullable
30+
@Override
31+
public String getDestinationTemplate(MnsProcessRequest request) {
32+
return null;
33+
}
34+
35+
@Override
36+
public boolean isTemporaryDestination(MnsProcessRequest request) {
37+
return false;
38+
}
39+
40+
@Override
41+
public boolean isAnonymousDestination(MnsProcessRequest request) {
42+
return false;
43+
}
44+
45+
@Override
46+
@Nullable
47+
public String getConversationId(MnsProcessRequest request) {
48+
return null;
49+
}
50+
51+
@Nullable
52+
@Override
53+
public Long getMessageBodySize(MnsProcessRequest request) {
54+
return (long) request.getMessage().getMessageBodyAsBytes().length;
55+
}
56+
57+
@Nullable
58+
@Override
59+
public Long getMessageEnvelopeSize(MnsProcessRequest request) {
60+
return (long) request.getMessage().getMessageBodyAsRawBytes().length;
61+
}
62+
63+
@Override
64+
@Nullable
65+
public String getMessageId(MnsProcessRequest request, @Nullable Void unused) {
66+
return request.getMessage().getMessageId();
67+
}
68+
69+
@Nullable
70+
@Override
71+
public String getClientId(MnsProcessRequest request) {
72+
return null;
73+
}
74+
75+
@Nullable
76+
@Override
77+
public Long getBatchMessageCount(MnsProcessRequest request, @Nullable Void unused) {
78+
return null;
79+
}
80+
81+
@Override
82+
public List<String> getMessageHeader(MnsProcessRequest request, String name) {
83+
String header = MnsHelper.getMessageHeader(request.getMessage(), name);
84+
if (header == null) {
85+
return Collections.emptyList();
86+
}
87+
return Collections.singletonList(header);
88+
}
89+
}

messaging-wrappers/aliyun-mns-sdk/src/main/java/io/opentelemetry/contrib/messaging/wrappers/mns/semconv/MnsProcessRequest.java

Lines changed: 3 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,9 @@
66
package io.opentelemetry.contrib.messaging.wrappers.mns.semconv;
77

88
import com.aliyun.mns.model.Message;
9-
import io.opentelemetry.contrib.messaging.wrappers.mns.MnsHelper;
10-
import io.opentelemetry.contrib.messaging.wrappers.semconv.MessagingProcessRequest;
11-
import java.util.Collections;
12-
import java.util.List;
139
import javax.annotation.Nullable;
1410

15-
public class MnsProcessRequest implements MessagingProcessRequest {
11+
public class MnsProcessRequest {
1612

1713
private final Message message;
1814

@@ -26,70 +22,15 @@ public static MnsProcessRequest of(Message message, @Nullable String destination
2622
return new MnsProcessRequest(message, destination);
2723
}
2824

29-
@Override
30-
public String getSystem() {
31-
return "smq";
25+
public Message getMessage() {
26+
return message;
3227
}
3328

3429
@Nullable
35-
@Override
3630
public String getDestination() {
3731
return this.destination;
3832
}
3933

40-
@Nullable
41-
@Override
42-
public String getDestinationTemplate() {
43-
return null;
44-
}
45-
46-
@Override
47-
public boolean isTemporaryDestination() {
48-
return false;
49-
}
50-
51-
@Override
52-
public boolean isAnonymousDestination() {
53-
return false;
54-
}
55-
56-
@Nullable
57-
@Override
58-
public String getConversationId() {
59-
return null;
60-
}
61-
62-
@Nullable
63-
@Override
64-
public Long getMessageBodySize() {
65-
return (long) message.getMessageBodyAsBytes().length;
66-
}
67-
68-
@Nullable
69-
@Override
70-
public Long getMessageEnvelopeSize() {
71-
return (long) message.getMessageBodyAsRawBytes().length;
72-
}
73-
74-
@Nullable
75-
@Override
76-
public String getMessageId() {
77-
return message.getMessageId();
78-
}
79-
80-
@Override
81-
public List<String> getMessageHeader(String name) {
82-
String header = MnsHelper.getMessageHeader(message, name);
83-
if (header == null) {
84-
return Collections.emptyList();
85-
}
86-
return Collections.singletonList(header);
87-
}
88-
89-
public Message getMessage() {
90-
return message;
91-
}
92-
9334
private MnsProcessRequest(Message message, @Nullable String destination) {
9435
this.message = message;
9536
this.destination = destination;

messaging-wrappers/aliyun-mns-sdk/src/test/java/io/opentelemetry/contrib/messaging/wrappers/mns/AliyunMnsSdkTest.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@
66
package io.opentelemetry.contrib.messaging.wrappers.mns;
77

88
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
9+
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies;
910
import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME;
1011
import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_MESSAGE_BODY_SIZE;
1112
import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_MESSAGE_ENVELOPE_SIZE;
13+
import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_MESSAGE_ID;
1214
import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_OPERATION;
1315
import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_SYSTEM;
1416
import static org.assertj.core.api.Assertions.assertThat;
@@ -138,7 +140,7 @@ public void assertTraces() {
138140
// instrumentation library.
139141
span.hasName("publish " + QUEUE).hasKind(SpanKind.PRODUCER).hasNoParent(),
140142
span ->
141-
span.hasName("process " + QUEUE)
143+
span.hasName(QUEUE + " process")
142144
.hasKind(SpanKind.CONSUMER)
143145
.hasParent(trace.getSpan(0))
144146
.hasAttributesSatisfyingExactly(
@@ -151,7 +153,10 @@ public void assertTraces() {
151153
MESSAGING_MESSAGE_ENVELOPE_SIZE,
152154
Base64.encodeBase64(MESSAGE_BODY.getBytes(StandardCharsets.UTF_8))
153155
.length),
154-
equalTo(MESSAGING_OPERATION, "process")),
156+
equalTo(MESSAGING_OPERATION, "process"),
157+
satisfies(
158+
MESSAGING_MESSAGE_ID,
159+
org.assertj.core.api.AbstractStringAssert::isNotEmpty)),
155160
span ->
156161
span.hasName("process child")
157162
.hasKind(SpanKind.INTERNAL)

0 commit comments

Comments
 (0)