mirror of https://github.com/grafana/grafana
GRPC Server: Add tracing interceptors (#56045)
Co-authored-by: Artur Wierzbicki <artur.wierzbicki@grafana.com>pull/56288/head
parent
a863a4d95d
commit
2d433194d0
@ -0,0 +1,45 @@ |
||||
package interceptors |
||||
|
||||
import ( |
||||
"context" |
||||
|
||||
"github.com/grafana/grafana/pkg/infra/tracing" |
||||
"google.golang.org/grpc" |
||||
) |
||||
|
||||
const tracingPrefix = "gRPC Server " |
||||
|
||||
func TracingUnaryInterceptor(tracer tracing.Tracer) grpc.UnaryServerInterceptor { |
||||
return func( |
||||
ctx context.Context, |
||||
req interface{}, |
||||
info *grpc.UnaryServerInfo, |
||||
handler grpc.UnaryHandler, |
||||
) (resp interface{}, err error) { |
||||
ctx, span := tracer.Start(ctx, tracingPrefix+info.FullMethod) |
||||
defer span.End() |
||||
resp, err = handler(ctx, req) |
||||
return resp, err |
||||
} |
||||
} |
||||
|
||||
func TracingStreamInterceptor(tracer tracing.Tracer) grpc.StreamServerInterceptor { |
||||
return func(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { |
||||
ctx, span := tracer.Start(stream.Context(), tracingPrefix+info.FullMethod) |
||||
defer span.End() |
||||
tracingStream := &tracingServerStream{ |
||||
ServerStream: stream, |
||||
ctx: ctx, |
||||
} |
||||
return handler(srv, tracingStream) |
||||
} |
||||
} |
||||
|
||||
type tracingServerStream struct { |
||||
grpc.ServerStream |
||||
ctx context.Context |
||||
} |
||||
|
||||
func (s *tracingServerStream) Context() context.Context { |
||||
return s.ctx |
||||
} |
||||
Loading…
Reference in new issue