1234567891011121314151617181920212223242526272829303132333435363738394041 |
- package clientinterceptors
- import (
- "context"
- "github.com/tal-tech/go-zero/core/trace"
- "google.golang.org/grpc"
- "google.golang.org/grpc/metadata"
- )
- // UnaryTracingInterceptor is an interceptor that handles tracing.
- func UnaryTracingInterceptor(ctx context.Context, method string, req, reply interface{},
- cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
- ctx, span := trace.StartClientSpan(ctx, cc.Target(), method)
- defer span.Finish()
- var pairs []string
- span.Visit(func(key, val string) bool {
- pairs = append(pairs, key, val)
- return true
- })
- ctx = metadata.AppendToOutgoingContext(ctx, pairs...)
- return invoker(ctx, method, req, reply, cc, opts...)
- }
- // StreamTracingInterceptor is an interceptor that handles tracing for stream requests.
- func StreamTracingInterceptor(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn,
- method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) {
- ctx, span := trace.StartClientSpan(ctx, cc.Target(), method)
- defer span.Finish()
- var pairs []string
- span.Visit(func(key, val string) bool {
- pairs = append(pairs, key, val)
- return true
- })
- ctx = metadata.AppendToOutgoingContext(ctx, pairs...)
- return streamer(ctx, desc, cc, method, opts...)
- }
|