(ab AuthBackend, logger grpc_logging.Logger)
| 69 | } |
| 70 | |
| 71 | func Server(ab AuthBackend, logger grpc_logging.Logger) *grpc.Server { |
| 72 | serverMetrics := grpc_prometheus.NewServerMetrics() |
| 73 | |
| 74 | myServer := grpc.NewServer( |
| 75 | grpc.ChainStreamInterceptor( |
| 76 | grpc_sentry.StreamServerInterceptor(), |
| 77 | grpc_logging.StreamServerInterceptor(logger), |
| 78 | serverMetrics.StreamServerInterceptor(), |
| 79 | func(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { |
| 80 | ctx := stream.Context() |
| 81 | ctx, md := prepareContext(ctx) |
| 82 | |
| 83 | wrappedStream := grpc_middleware.WrapServerStream(stream) |
| 84 | wrappedStream.WrappedContext = ctx |
| 85 | var addr string |
| 86 | if p, ok := peer.FromContext(ctx); ok { |
| 87 | addr = p.Addr.String() |
| 88 | } |
| 89 | |
| 90 | start := time.Now() |
| 91 | err := handler(srv, wrappedStream) |
| 92 | |
| 93 | if err := addExternalDependencyToTrailer(ctx); err != nil { |
| 94 | log.Ctx(ctx).Warn().Err(err).Msg("unable to add external dependencies to trailer") |
| 95 | } |
| 96 | |
| 97 | log.Ctx(ctx).Info().Str("method", info.FullMethod). |
| 98 | Dur("duration", time.Since(start)). |
| 99 | Str("type", "stream"). |
| 100 | Str("ip", addr). |
| 101 | Interface("md", md). |
| 102 | Str("user_agent", strings.Join(md.Get("user-agent"), ",")). |
| 103 | Err(err). |
| 104 | Msg("GRPC completed Stream") |
| 105 | return err |
| 106 | }, |
| 107 | func(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) (err error) { |
| 108 | defer errors.HandleWithCtx(stream.Context(), "GRPC "+info.FullMethod) |
| 109 | err = InternalServerError // default in case of a panic |
| 110 | err = handler(srv, stream) |
| 111 | return err |
| 112 | }, |
| 113 | grpc_auth.StreamServerInterceptor(ab.AuthorizeStream), |
| 114 | ), |
| 115 | grpc.ChainUnaryInterceptor( |
| 116 | grpc_sentry.UnaryServerInterceptor(), |
| 117 | grpc_logging.UnaryServerInterceptor(logger), |
| 118 | serverMetrics.UnaryServerInterceptor(), |
| 119 | func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) { |
| 120 | ctx, md := prepareContext(ctx) |
| 121 | |
| 122 | var addr string |
| 123 | if p, ok := peer.FromContext(ctx); ok { |
| 124 | addr = p.Addr.String() |
| 125 | } |
| 126 | |
| 127 | start := time.Now() |
| 128 | resp, err = handler(ctx, req) |
no test coverage detected
searching dependent graphs…