This is my previous question grpc middleware(interceptors) for metric
I want to use middleware. That's what I have now.
func RequestTimeStream(mtr *metrics.Metrics) grpc.StreamServerInterceptor {
return grpc.StreamServerInterceptor(func(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo,
handler grpc.StreamHandler) error {
beginTime := time.Now()
label, err := getLabel(info.FullMethod)
if err != nil {
return errors.Errorf("Unknown method name: %s", info.FullMethod)
}
defer mtr.RequestTime.With(metrics.MakeLabels(label)).Observe(time.Since(beginTime).Seconds())
if err := handler(srv, stream); err != nil {
return err
}
return nil
})
}
Creating grpc server
streamInterceptors := grpc_middleware.ChainStreamServer(
middleware.RecoveryStream(logger, metrics.InternalGRPCPanicErrors),
identifyMdw.IdentifyStream,
middleware.AuthenticateStream(logger, metrics, authService),
middleware.LimitStream(logger, metrics, limiters),
middleware.RequestTimeStream(metrics),
)
opts := []grpc.ServerOption{grpc.UnaryInterceptor(unaryInterceptors), grpc.StreamInterceptor(streamInterceptors)}
grpcServer, err := ggrpc.NewServer(cfg.ServerConfig, opts...)
My code is not working properly. The metrics are too small ~30,000 nanoseconds.