MCPcopy Create free account
hub / github.com/pace/bricks / Server

Function Server

grpc/server.go:71–155  ·  view source on GitHub ↗
(ab AuthBackend, logger grpc_logging.Logger)

Source from the content-addressed store, hash-verified

69}
70
71func 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)

Callers 1

mainFunction · 0.92

Calls 9

HandleWithCtxFunction · 0.92
prepareContextFunction · 0.85
handlerStruct · 0.85
ContextMethod · 0.80
NowMethod · 0.80
ErrMethod · 0.80
GetMethod · 0.65
StringMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…