diff options
author | Patrick Steinhardt <ps@pks.im> | 2023-08-18 08:49:19 +0300 |
---|---|---|
committer | Patrick Steinhardt <psteinhardt@gitlab.com> | 2023-08-18 11:21:12 +0300 |
commit | 88a518f6d908398cfae9c2a6c77a556bc0bb5607 (patch) | |
tree | e3b55f5c4dcb8374b16ec3ab2b20ec35d7a75026 | |
parent | c921427ad6c1c1be0bbd75d0c2aba80ca0dc7c4a (diff) |
middleware/panichandler: Inject logger instead of using global one
We're using the global logging instance provided by the logrus package,
which is discouraged. Inject a logger such that we can use a properly
configured logger instead.
-rw-r--r-- | internal/gitaly/server/server.go | 4 | ||||
-rw-r--r-- | internal/grpc/middleware/panichandler/panic_handler.go | 39 | ||||
-rw-r--r-- | internal/praefect/server.go | 4 |
3 files changed, 23 insertions, 24 deletions
diff --git a/internal/gitaly/server/server.go b/internal/gitaly/server/server.go index 2b1127d97..d8b873238 100644 --- a/internal/gitaly/server/server.go +++ b/internal/gitaly/server/server.go @@ -148,7 +148,7 @@ func (s *GitalyServerFactory) New(secure bool, opts ...Option) (*grpc.Server, er cache.StreamInvalidator(s.cacheInvalidator, protoregistry.GitalyProtoPreregistered), // Panic handler should remain last so that application panics will be // converted to errors and logged - panichandler.StreamPanicHandler, + panichandler.StreamPanicHandler(s.logger), ) unaryServerInterceptors = append(unaryServerInterceptors, @@ -156,7 +156,7 @@ func (s *GitalyServerFactory) New(secure bool, opts ...Option) (*grpc.Server, er cache.UnaryInvalidator(s.cacheInvalidator, protoregistry.GitalyProtoPreregistered), // Panic handler should remain last so that application panics will be // converted to errors and logged - panichandler.UnaryPanicHandler, + panichandler.UnaryPanicHandler(s.logger), ) streamServerInterceptors = append(streamServerInterceptors, cfg.streamInterceptors...) diff --git a/internal/grpc/middleware/panichandler/panic_handler.go b/internal/grpc/middleware/panichandler/panic_handler.go index e91269d5f..089dfcc79 100644 --- a/internal/grpc/middleware/panichandler/panic_handler.go +++ b/internal/grpc/middleware/panichandler/panic_handler.go @@ -3,17 +3,12 @@ package panichandler import ( "context" - log "github.com/sirupsen/logrus" + "github.com/sirupsen/logrus" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) -var ( - _ grpc.UnaryServerInterceptor = UnaryPanicHandler - _ grpc.StreamServerInterceptor = StreamPanicHandler -) - // PanicHandler is a handler that will be called on a grpc panic type PanicHandler func(methodName string, error interface{}) @@ -21,22 +16,26 @@ func toPanicError(grpcMethodName string, r interface{}) error { return status.Errorf(codes.Internal, "panic: %v", r) } -// UnaryPanicHandler handles request-response panics -func UnaryPanicHandler(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) { - defer handleCrash(info.FullMethod, func(grpcMethodName string, r interface{}) { - err = toPanicError(grpcMethodName, r) - }) +// UnaryPanicHandler creates a new unary server interceptor that handles panics. +func UnaryPanicHandler(logger logrus.FieldLogger) grpc.UnaryServerInterceptor { + return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) { + defer handleCrash(logger, info.FullMethod, func(grpcMethodName string, r interface{}) { + err = toPanicError(grpcMethodName, r) + }) - return handler(ctx, req) + return handler(ctx, req) + } } -// StreamPanicHandler handles stream panics -func StreamPanicHandler(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) (err error) { - defer handleCrash(info.FullMethod, func(grpcMethodName string, r interface{}) { - err = toPanicError(grpcMethodName, r) - }) +// StreamPanicHandler creates a new stream server interceptor that handles panics. +func StreamPanicHandler(logger logrus.FieldLogger) grpc.StreamServerInterceptor { + return func(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) (err error) { + defer handleCrash(logger, info.FullMethod, func(grpcMethodName string, r interface{}) { + err = toPanicError(grpcMethodName, r) + }) - return handler(srv, stream) + return handler(srv, stream) + } } var additionalHandlers []PanicHandler @@ -46,9 +45,9 @@ func InstallPanicHandler(handler PanicHandler) { additionalHandlers = append(additionalHandlers, handler) } -func handleCrash(grpcMethodName string, handler PanicHandler) { +func handleCrash(logger logrus.FieldLogger, grpcMethodName string, handler PanicHandler) { if r := recover(); r != nil { - log.WithFields(log.Fields{ + logger.WithFields(logrus.Fields{ "error": r, "method": grpcMethodName, }).Error("grpc panic") diff --git a/internal/praefect/server.go b/internal/praefect/server.go index 3084a62bd..0b4a5e2f3 100644 --- a/internal/praefect/server.go +++ b/internal/praefect/server.go @@ -82,7 +82,7 @@ func commonUnaryServerInterceptors(logger *logrus.Entry, messageProducer grpcmwl grpctracing.UnaryServerTracingInterceptor(), // Panic handler should remain last so that application panics will be // converted to errors and logged - panichandler.UnaryPanicHandler, + panichandler.UnaryPanicHandler(logger), } } @@ -153,7 +153,7 @@ func NewGRPCServer( auth.StreamServerInterceptor(deps.Config.Auth), // Panic handler should remain last so that application panics will be // converted to errors and logged - panichandler.StreamPanicHandler, + panichandler.StreamPanicHandler(deps.Logger), } streamInterceptors = append(streamInterceptors, serverCfg.streamInterceptors...) |