Skip to content

Commit a8acc97

Browse files
author
Artur Ciocanu
committed
Ensure trace is properly sent using OTEL
Signed-off-by: Artur Ciocanu <[email protected]>
1 parent b5ae050 commit a8acc97

File tree

3 files changed

+58
-2
lines changed

3 files changed

+58
-2
lines changed

dapr-spring/dapr-spring-messaging/src/main/java/io/dapr/spring/messaging/DaprMessagingTemplate.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,20 @@
2020
import io.dapr.spring.messaging.observation.DaprMessagingSenderContext;
2121
import io.micrometer.observation.Observation;
2222
import io.micrometer.observation.ObservationRegistry;
23+
import io.opentelemetry.api.OpenTelemetry;
24+
import io.opentelemetry.context.propagation.TextMapSetter;
2325
import org.slf4j.Logger;
2426
import org.slf4j.LoggerFactory;
2527
import org.springframework.beans.factory.BeanNameAware;
2628
import org.springframework.beans.factory.SmartInitializingSingleton;
2729
import org.springframework.context.ApplicationContext;
2830
import org.springframework.context.ApplicationContextAware;
2931
import reactor.core.publisher.Mono;
32+
import reactor.util.context.Context;
3033

3134
import javax.annotation.Nullable;
3235

36+
import java.util.HashMap;
3337
import java.util.Map;
3438

3539
/**
@@ -55,6 +59,9 @@ public class DaprMessagingTemplate<T> implements DaprMessagingOperations<T>, App
5559
@Nullable
5660
private String beanName;
5761

62+
@Nullable
63+
private OpenTelemetry openTelemetry;
64+
5865
@Nullable
5966
private ObservationRegistry observationRegistry;
6067

@@ -102,6 +109,8 @@ public void afterSingletonsInstantiated() {
102109

103110
observationRegistry = applicationContext.getBeanProvider(ObservationRegistry.class)
104111
.getIfUnique(() -> observationRegistry);
112+
this.openTelemetry = this.applicationContext.getBeanProvider(OpenTelemetry.class)
113+
.getIfUnique(() -> this.openTelemetry);
105114
observationConvention = applicationContext.getBeanProvider(DaprMessagingObservationConvention.class)
106115
.getIfUnique(() -> observationConvention);
107116
}
@@ -133,7 +142,7 @@ private Mono<Void> doSendAsync(String topic, T message) {
133142
private boolean canUseObservation() {
134143
return observationEnabled
135144
&& observationRegistry != null
136-
&& observationConvention != null
145+
&& openTelemetry != null
137146
&& beanName != null;
138147
}
139148

@@ -147,6 +156,7 @@ private Mono<Void> publishEventWithObservation(String pubsubName, String topic,
147156

148157
return observation.observe(() ->
149158
publishEvent(pubsubName, topic, message)
159+
.contextWrite(getReactorContext())
150160
.doOnError(err -> {
151161
LOGGER.error("Failed to send msg to '{}' topic", topic, err);
152162

@@ -161,6 +171,16 @@ private Mono<Void> publishEventWithObservation(String pubsubName, String topic,
161171
);
162172
}
163173

174+
private Context getReactorContext() {
175+
Map<String, String> map = new HashMap<>();
176+
TextMapSetter<Map<String, String>> setter = (carrier, key, value) -> map.put(key, value);
177+
io.opentelemetry.context.Context otelContext = io.opentelemetry.context.Context.current();
178+
179+
openTelemetry.getPropagators().getTextMapPropagator().inject(otelContext, map, setter);
180+
181+
return Context.of(map);
182+
}
183+
164184
private Observation createObservation(DaprMessagingSenderContext senderContext) {
165185
return DaprMessagingObservationDocumentation.TEMPLATE_OBSERVATION.observation(
166186
observationConvention,

dapr-spring/pom.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,16 @@
7575
<optional>true</optional>
7676
</dependency>
7777

78+
<!-- OTEL dependencies -->
79+
<dependency>
80+
<groupId>io.opentelemetry</groupId>
81+
<artifactId>opentelemetry-api</artifactId>
82+
</dependency>
83+
<dependency>
84+
<groupId>io.opentelemetry</groupId>
85+
<artifactId>opentelemetry-context</artifactId>
86+
</dependency>
87+
7888
<!-- Test dependencies -->
7989
<dependency>
8090
<groupId>org.springframework.boot</groupId>

testcontainers-dapr/src/main/java/io/dapr/testcontainers/DaprContainer.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import io.dapr.testcontainers.converter.SubscriptionYamlConverter;
1919
import io.dapr.testcontainers.converter.YamlConverter;
2020
import io.dapr.testcontainers.converter.YamlMapperFactory;
21+
import org.slf4j.Logger;
22+
import org.slf4j.LoggerFactory;
2123
import org.testcontainers.containers.GenericContainer;
2224
import org.testcontainers.containers.Network;
2325
import org.testcontainers.containers.wait.strategy.Wait;
@@ -30,13 +32,15 @@
3032
import java.nio.file.Files;
3133
import java.nio.file.Path;
3234
import java.util.ArrayList;
35+
import java.util.Arrays;
3336
import java.util.Collections;
3437
import java.util.HashSet;
3538
import java.util.List;
3639
import java.util.Map;
3740
import java.util.Set;
3841

3942
public class DaprContainer extends GenericContainer<DaprContainer> {
43+
private static final Logger LOGGER = LoggerFactory.getLogger(DaprContainer.class);
4044
private static final int DAPRD_DEFAULT_HTTP_PORT = 3500;
4145
private static final int DAPRD_DEFAULT_GRPC_PORT = 50001;
4246
private static final DaprProtocol DAPR_PROTOCOL = DaprProtocol.HTTP;
@@ -235,14 +239,28 @@ protected void configure() {
235239
cmds.add(Integer.toString(appPort));
236240
}
237241

242+
if (configuration != null) {
243+
cmds.add("--config");
244+
cmds.add("/dapr-resources/" + configuration.getName() + ".yaml");
245+
}
246+
238247
cmds.add("--log-level");
239248
cmds.add(daprLogLevel.toString());
240249
cmds.add("--resources-path");
241250
cmds.add("/dapr-resources");
242-
withCommand(cmds.toArray(new String[]{}));
251+
252+
String[] cmdArray = cmds.toArray(new String[]{});
253+
LOGGER.info("> `daprd` Command: \n");
254+
LOGGER.info("\t" + Arrays.toString(cmdArray) + "\n");
255+
256+
withCommand(cmdArray);
243257

244258
if (configuration != null) {
245259
String configurationYaml = CONFIGURATION_CONVERTER.convert(configuration);
260+
261+
LOGGER.info("> Configuration YAML: \n");
262+
LOGGER.info("\t\n" + configurationYaml + "\n");
263+
246264
withCopyToContainer(Transferable.of(configurationYaml), "/dapr-resources/" + configuration.getName() + ".yaml");
247265
}
248266

@@ -257,11 +275,19 @@ protected void configure() {
257275

258276
for (Component component : components) {
259277
String componentYaml = COMPONENT_CONVERTER.convert(component);
278+
279+
LOGGER.info("> Component YAML: \n");
280+
LOGGER.info("\t\n" + componentYaml + "\n");
281+
260282
withCopyToContainer(Transferable.of(componentYaml), "/dapr-resources/" + component.getName() + ".yaml");
261283
}
262284

263285
for (Subscription subscription : subscriptions) {
264286
String subscriptionYaml = SUBSCRIPTION_CONVERTER.convert(subscription);
287+
288+
LOGGER.info("> Subscription YAML: \n");
289+
LOGGER.info("\t\n" + subscriptionYaml + "\n");
290+
265291
withCopyToContainer(Transferable.of(subscriptionYaml), "/dapr-resources/" + subscription.getName() + ".yaml");
266292
}
267293

0 commit comments

Comments
 (0)