gRPC interceptors used in netbook services
It injects the following interceptor
- kit Interceptor - inject method name to the context
- loggingInterceptor - log request and response data, duration of the call
- recoveryInterceptor - recover from any API panics gracefully and logs error
go get -u github.com/netbook-ai/interceptors@v0.1.0
You may not be able to access the repo with netbook-devs path in GOPRIVATE, update it as follows
export GOPRIVATE=gitlab.com/*
can update it in your profile settings (.bashrc, .zshrc)
Register interceptors when setting up gRPC server in application
//get Interceptor interface
interceptor := interceptors.NewInterceptor("spawnerservice", logger)
//Calling Get will return ServerOptions
baseServer := grpc.NewServer(interceptor.Get())
func InstrumentationInterceptor() grpc.UnaryServerInterceptor {
return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) {
IncRequest(getMethod(info))
return handler(ctx, req)
}
}
//get Interceptor interface
interceptor := interceptors.NewInterceptor(
"spawnerservice",
logger,
interceptors.WithInterceptor(InstrumentationInterceptor()))
//Calling Get will return ServerOptions, which is passed to NewServer
baseServer := grpc.NewServer(interceptor.Get())
You can skip sensitive API request and response from request-response logging interceptor.
//get Interceptor interface
var skipMethods = []string{"ReadCredential", "WriteCredential"}
interceptor := interceptors.NewInterceptor(
"spawnerservice",
logger,
interceptors.WithSkipMethod(skipMethods))
//Calling Get will return ServerOptions, which is passed to NewServer
baseServer := grpc.NewServer(interceptor.Get())
Raise a issue, we will get back to you.
- Nishanth Shetty nishanthspshetty@gmail.com
GNU GENERAL PUBLIC LICENSE