3636import com .google .api .gax .rpc .Callables ;
3737import com .google .api .gax .rpc .ClientContext ;
3838import com .google .api .gax .rpc .ClientStreamingCallable ;
39+ import com .google .api .gax .rpc .LibraryMetadata ;
3940import com .google .api .gax .rpc .LongRunningClient ;
4041import com .google .api .gax .rpc .OperationCallSettings ;
4142import com .google .api .gax .rpc .OperationCallable ;
4647import com .google .api .gax .rpc .StreamingCallSettings ;
4748import com .google .api .gax .rpc .UnaryCallSettings ;
4849import com .google .api .gax .rpc .UnaryCallable ;
50+ import com .google .api .gax .tracing .ApiTracerContext ;
4951import com .google .api .gax .tracing .SpanName ;
5052import com .google .api .gax .tracing .TracedBatchingCallable ;
5153import com .google .api .gax .tracing .TracedBidiCallable ;
6668/** Class with utility methods to create grpc-based direct callables. */
6769public class GrpcCallableFactory {
6870 // Used to extract service and method name from a grpc MethodDescriptor.
69- private static final Pattern FULL_METHOD_NAME_REGEX = Pattern .compile ("^.*?([^./]+)/([^./]+)$" );
71+ private static final String FULL_METHOD_NAME_REGEX = "^.*?([^./]+)/([^./]+)$" ;
72+ private static final Pattern FULL_METHOD_NAME_PATTERN = Pattern .compile (FULL_METHOD_NAME_REGEX );
7073
7174 private GrpcCallableFactory () {}
7275
@@ -112,7 +115,7 @@ public static <RequestT, ResponseT> UnaryCallable<RequestT, ResponseT> createUna
112115 new TracedUnaryCallable <>(
113116 callable ,
114117 clientContext .getTracerFactory (),
115- getSpanName (grpcCallSettings .getMethodDescriptor ()));
118+ getApiTracerContext (grpcCallSettings .getMethodDescriptor ()));
116119
117120 return callable .withDefaultCallContext (clientContext .getDefaultCallContext ());
118121 }
@@ -161,7 +164,7 @@ public static <RequestT, ResponseT> UnaryCallable<RequestT, ResponseT> createBat
161164 new TracedBatchingCallable <>(
162165 baseCallable ,
163166 clientContext .getTracerFactory (),
164- getSpanName (grpcCallSettings .getMethodDescriptor ()),
167+ getApiTracerContext (grpcCallSettings .getMethodDescriptor ()),
165168 batchingCallSettings .getBatchingDescriptor ());
166169
167170 UnaryCallable <RequestT , ResponseT > batchingCallable =
@@ -200,7 +203,7 @@ OperationCallable<RequestT, ResponseT, MetadataT> createOperationCallable(
200203 // Create a sub-trace for the initial RPC that starts the operation.
201204 UnaryCallable <RequestT , OperationSnapshot > tracedInitialCallable =
202205 new TracedOperationInitialCallable <>(
203- initialCallable , clientContext .getTracerFactory (), initialSpanName );
206+ initialCallable , clientContext .getTracerFactory (), getApiTracerContext ( grpcCallSettings . getMethodDescriptor ()) );
204207
205208 LongRunningClient longRunningClient = new GrpcLongRunningClient (operationsStub );
206209 OperationCallable <RequestT , ResponseT , MetadataT > operationCallable =
@@ -209,7 +212,7 @@ OperationCallable<RequestT, ResponseT, MetadataT> createOperationCallable(
209212
210213 OperationCallable <RequestT , ResponseT , MetadataT > tracedOperationCallable =
211214 new TracedOperationCallable <>(
212- operationCallable , clientContext .getTracerFactory (), operationSpanName );
215+ operationCallable , clientContext .getTracerFactory (), getApiTracerContext ( grpcCallSettings . getMethodDescriptor ()) );
213216
214217 return tracedOperationCallable .withDefaultCallContext (clientContext .getDefaultCallContext ());
215218 }
@@ -237,7 +240,7 @@ BidiStreamingCallable<RequestT, ResponseT> createBidiStreamingCallable(
237240 new TracedBidiCallable <>(
238241 callable ,
239242 clientContext .getTracerFactory (),
240- getSpanName (grpcCallSettings .getMethodDescriptor ()));
243+ getApiTracerContext (grpcCallSettings .getMethodDescriptor ()));
241244
242245 return callable .withDefaultCallContext (clientContext .getDefaultCallContext ());
243246 }
@@ -295,7 +298,7 @@ ServerStreamingCallable<RequestT, ResponseT> createServerStreamingCallable(
295298 new TracedServerStreamingCallable <>(
296299 callable ,
297300 clientContext .getTracerFactory (),
298- getSpanName (grpcCallSettings .getMethodDescriptor ()));
301+ getApiTracerContext (grpcCallSettings .getMethodDescriptor ()));
299302
300303 return callable .withDefaultCallContext (clientContext .getDefaultCallContext ());
301304 }
@@ -323,16 +326,26 @@ ClientStreamingCallable<RequestT, ResponseT> createClientStreamingCallable(
323326 new TracedClientStreamingCallable <>(
324327 callable ,
325328 clientContext .getTracerFactory (),
326- getSpanName (grpcCallSettings .getMethodDescriptor ()));
329+ getApiTracerContext (grpcCallSettings .getMethodDescriptor ()));
327330
328331 return callable .withDefaultCallContext (clientContext .getDefaultCallContext ());
329332 }
330333
331334 @ InternalApi ("Visible for testing" )
332335 static SpanName getSpanName (@ Nonnull MethodDescriptor <?, ?> methodDescriptor ) {
333- Matcher matcher = FULL_METHOD_NAME_REGEX .matcher (methodDescriptor .getFullMethodName ());
336+ Matcher matcher = FULL_METHOD_NAME_PATTERN .matcher (methodDescriptor .getFullMethodName ());
334337
335338 Preconditions .checkArgument (matcher .matches (), "Invalid fullMethodName" );
336339 return SpanName .of (matcher .group (1 ), matcher .group (2 ));
337340 }
341+
342+ private static ApiTracerContext getApiTracerContext (
343+ @ Nonnull MethodDescriptor <?, ?> methodDescriptor ) {
344+ return ApiTracerContext .newBuilder ()
345+ .setRpcSystemName ("grpc" )
346+ .setRpcMethod (methodDescriptor .getFullMethodName ())
347+ .setFullMethodNameRegex (FULL_METHOD_NAME_REGEX )
348+ .setLibraryMetadata (LibraryMetadata .empty ())
349+ .build ();
350+ }
338351}
0 commit comments