NewGRPCServer new a gRPC server.
(opts *Opts)
| 112 | |
| 113 | // NewGRPCServer new a gRPC server. |
| 114 | func NewGRPCServer(opts *Opts) (*grpc.Server, error) { |
| 115 | // Opt-in histogram metrics for the interceptor |
| 116 | grpc_prometheus.EnableHandlingTimeHistogram() |
| 117 | |
| 118 | // NOTE: kratos middlewares will always be run before plain grpc unary interceptors |
| 119 | // If you want to change the behavior, please refer to wrappers.go and the Prometheus wrapper as example |
| 120 | var serverOpts = []grpc.ServerOption{ |
| 121 | grpc.Middleware(craftMiddleware(opts)...), |
| 122 | grpc.UnaryInterceptor( |
| 123 | protovalidateMiddleware.UnaryServerInterceptor(opts.Validator), |
| 124 | ), |
| 125 | grpc.Options(grpcLib.StatsHandler(otelgrpc.NewServerHandler())), |
| 126 | } |
| 127 | |
| 128 | if v := opts.ServerConfig.Grpc.Network; v != "" { |
| 129 | serverOpts = append(serverOpts, grpc.Network(v)) |
| 130 | } |
| 131 | if v := opts.ServerConfig.Grpc.Addr; v != "" { |
| 132 | serverOpts = append(serverOpts, grpc.Address(v)) |
| 133 | } |
| 134 | if v := opts.ServerConfig.Grpc.Timeout; v != nil { |
| 135 | serverOpts = append(serverOpts, grpc.Timeout(v.AsDuration())) |
| 136 | } |
| 137 | if tlsConf := opts.ServerConfig.Grpc.GetTlsConfig(); tlsConf != nil { |
| 138 | cert := tlsConf.GetCertificate() |
| 139 | privKey := tlsConf.GetPrivateKey() |
| 140 | if cert != "" && privKey != "" { |
| 141 | cert, err := tls.LoadX509KeyPair(cert, privKey) |
| 142 | if err != nil { |
| 143 | return nil, fmt.Errorf("loading gRPC server TLS certificate: %w", err) |
| 144 | } |
| 145 | serverOpts = append(serverOpts, grpc.TLSConfig(&tls.Config{ |
| 146 | Certificates: []tls.Certificate{cert}, |
| 147 | MinVersion: tls.VersionTLS12, // gosec complains about insecure minimum version we use default value |
| 148 | })) |
| 149 | } |
| 150 | } |
| 151 | |
| 152 | if v := opts.ServerConfig.Grpc.GetMaxRecvMsgSize(); v > 0 { |
| 153 | serverOpts = append(serverOpts, grpc.Options(grpcLib.MaxRecvMsgSize(int(v)))) |
| 154 | } |
| 155 | |
| 156 | srv := grpc.NewServer(serverOpts...) |
| 157 | v1.RegisterWorkflowServiceServer(srv, opts.WorkflowSvc) |
| 158 | v1.RegisterStatusServiceServer(srv, service.NewStatusService(opts.AuthSvc.AuthURLs.Login, Version, opts.CASClientUseCase, opts.BootstrapConfig)) |
| 159 | v1.RegisterRobotAccountServiceServer(srv, opts.RobotAccountSvc) |
| 160 | v1.RegisterWorkflowRunServiceServer(srv, opts.WorkflowRunSvc) |
| 161 | v1.RegisterAttestationServiceServer(srv, opts.AttestationSvc) |
| 162 | v1.RegisterWorkflowContractServiceServer(srv, opts.WorkflowContractSvc) |
| 163 | v1.RegisterCASCredentialsServiceServer(srv, opts.CASCredsSvc) |
| 164 | v1.RegisterContextServiceServer(srv, opts.ContextSvc) |
| 165 | v1.RegisterOrgMetricsServiceServer(srv, opts.OrgMetricsSvc) |
| 166 | v1.RegisterIntegrationsServiceServer(srv, opts.IntegrationsSvc) |
| 167 | v1.RegisterOrganizationServiceServer(srv, opts.OrganizationSvc) |
| 168 | v1.RegisterAuthServiceServer(srv, opts.AuthSvc) |
| 169 | v1.RegisterCASBackendServiceServer(srv, opts.CASBackendSvc) |
| 170 | v1.RegisterCASRedirectServiceServer(srv, opts.CASRedirectSvc) |
| 171 | v1.RegisterOrgInvitationServiceServer(srv, opts.OrgInvitationSvc) |
no test coverage detected