44
55import com .google .protobuf .StringValue ;
66import com .google .protobuf .Timestamp ;
7+ import io .opentelemetry .api .trace .Span ;
8+ import io .opentelemetry .api .trace .Tracer ;
79import io .dapr .durabletask .implementation .protobuf .OrchestratorService .*;
810import io .dapr .durabletask .implementation .protobuf .TaskHubSidecarServiceGrpc ;
911import io .dapr .durabletask .implementation .protobuf .TaskHubSidecarServiceGrpc .*;
@@ -38,6 +40,7 @@ public final class DurableTaskGrpcClient extends DurableTaskClient {
3840 private final DataConverter dataConverter ;
3941 private final ManagedChannel managedSidecarChannel ;
4042 private final TaskHubSidecarServiceBlockingStub sidecarClient ;
43+ private final Tracer tracer ;
4144
4245 DurableTaskGrpcClient (DurableTaskGrpcClientBuilder builder ) {
4346 this .dataConverter = builder .dataConverter != null ? builder .dataConverter : new JacksonDataConverter ();
@@ -109,8 +112,9 @@ public final class DurableTaskGrpcClient extends DurableTaskClient {
109112 // Need to keep track of this channel so we can dispose it on close()
110113 this .managedSidecarChannel = channelBuilder .build ();
111114 sidecarGrpcChannel = this .managedSidecarChannel ;
112- }
113115
116+ }
117+ this .tracer = builder .tracer ;
114118 this .sidecarClient = TaskHubSidecarServiceGrpc .newBlockingStub (sidecarGrpcChannel );
115119 }
116120
@@ -169,6 +173,23 @@ public String scheduleNewOrchestrationInstance(
169173 builder .setScheduledStartTimestamp (ts );
170174 }
171175
176+ if (tracer != null ) {
177+ Span span = tracer .spanBuilder ("dapr.workflow.grpc.startInstance" )
178+ .startSpan ();
179+ try {
180+ TraceContext .Builder traceContextBuilder = TraceContext .newBuilder ();
181+ traceContextBuilder .setTraceParent (span .getSpanContext ().getTraceId ());
182+ traceContextBuilder .setSpanID (span .getSpanContext ().getSpanId ());
183+ builder .setParentTraceContext (traceContextBuilder .build ());
184+
185+ CreateInstanceRequest request = builder .build ();
186+ CreateInstanceResponse response = this .sidecarClient .startInstance (request );
187+ return response .getInstanceId ();
188+ } finally {
189+ span .end ();
190+ }
191+ }
192+
172193 CreateInstanceRequest request = builder .build ();
173194 CreateInstanceResponse response = this .sidecarClient .startInstance (request );
174195 return response .getInstanceId ();
@@ -180,11 +201,27 @@ public void raiseEvent(String instanceId, String eventName, Object eventPayload)
180201 Helpers .throwIfArgumentNull (eventName , "eventName" );
181202
182203 RaiseEventRequest .Builder builder = RaiseEventRequest .newBuilder ()
183- .setInstanceId (instanceId )
184- .setName (eventName );
204+ .setInstanceId (instanceId )
205+ .setName (eventName );
185206 if (eventPayload != null ) {
186- String serializedPayload = this .dataConverter .serialize (eventPayload );
187- builder .setInput (StringValue .of (serializedPayload ));
207+ String serializedPayload = this .dataConverter .serialize (eventPayload );
208+ builder .setInput (StringValue .of (serializedPayload ));
209+ }
210+
211+ if (tracer != null ) {
212+ Span span = tracer .spanBuilder ("dapr.workflow.grpc.raiseEvent" )
213+ .startSpan ();
214+ try {
215+ TraceContext .Builder traceContextBuilder = TraceContext .newBuilder ();
216+ traceContextBuilder .setTraceParent (span .getSpanContext ().getTraceId ());
217+ traceContextBuilder .setSpanID (span .getSpanContext ().getSpanId ());
218+ builder .setParentTraceContext (traceContextBuilder .build ());
219+
220+ RaiseEventRequest request = builder .build ();
221+ this .sidecarClient .raiseEvent (request );
222+ } finally {
223+ span .end ();
224+ }
188225 }
189226
190227 RaiseEventRequest request = builder .build ();
0 commit comments