12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- package serverinterceptors
- import (
- "context"
- "github.com/tal-tech/go-zero/core/trace"
- "google.golang.org/grpc"
- "google.golang.org/grpc/metadata"
- )
- // UnaryTracingInterceptor returns a func that handles tracing with given service name.
- func UnaryTracingInterceptor(serviceName string) grpc.UnaryServerInterceptor {
- return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo,
- handler grpc.UnaryHandler) (resp interface{}, err error) {
- md, ok := metadata.FromIncomingContext(ctx)
- if !ok {
- return handler(ctx, req)
- }
- carrier, err := trace.Extract(trace.GrpcFormat, md)
- if err != nil {
- return handler(ctx, req)
- }
- ctx, span := trace.StartServerSpan(ctx, carrier, serviceName, info.FullMethod)
- defer span.Finish()
- return handler(ctx, req)
- }
- }
- func StreamTracingInterceptor(serviceName string) grpc.StreamServerInterceptor {
- return func(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo,
- handler grpc.StreamHandler) error {
- ctx := ss.Context()
- md, ok := metadata.FromIncomingContext(ctx)
- if !ok {
- return handler(srv, ss)
- }
- carrier, err := trace.Extract(trace.GrpcFormat, md)
- if err != nil {
- return handler(srv, ss)
- }
- ctx, span := trace.StartServerSpan(ctx, carrier, serviceName, info.FullMethod)
- defer span.Finish()
- return handler(srv, ss)
- }
- }
|