in server/internal/server/server.go [31:114]
func (s *Server) Serve(options Options) {
logger := log.New(log.NewTextHandler(os.Stdout, nil).WithAttrs(logattrs.GetAttrs()))
if options.JsonLog {
logger = log.New(log.NewJSONHandler(os.Stdout, nil).WithAttrs(logattrs.GetAttrs()))
}
log.SetDefault(logger)
s.Init(options)
s.GrpcServer = grpc.NewServer(grpc.ChainUnaryInterceptor(
interceptor.DefaultServerInterceptors(interceptor.GetServerInterceptorLogOptions(logger, logattrs.GetAttrs()))...,
))
pb.RegisterMyGreeterServer(s.GrpcServer, s)
healthServer := health.NewServer()
grpc_health_v1.RegisterHealthServer(s.GrpcServer, healthServer)
healthServer.SetServingStatus("", grpc_health_v1.HealthCheckResponse_NOT_SERVING)
grpcListener, err := net.Listen("tcp", fmt.Sprintf(":%d", options.Port))
if err != nil {
logger.Error("failed to listen: " + err.Error())
os.Exit(1)
}
logger.Info(fmt.Sprintf("server listening at %s", grpcListener.Addr().String()))
go func() {
if err := s.GrpcServer.Serve(grpcListener); err != nil {
logger.Error("failed to serve: " + err.Error())
os.Exit(1)
}
}()
healthServer.SetServingStatus("", grpc_health_v1.HealthCheckResponse_SERVING)
s.GrpcPort = grpcListener.Addr().(*net.TCPAddr).Port
serverAddress := grpcListener.Addr().String()
conn, err := grpc.DialContext(
context.Background(),
serverAddress,
grpc.WithInsecure(),
)
if err != nil {
logger.Error("Failed to dial server: " + err.Error())
os.Exit(1)
}
gwmux := runtime.NewServeMux(
aksMiddlewareMetadata.NewMetadataMiddleware(common.HeaderToMetadata, common.MetadataToHeader)...,
)
err = pb.RegisterMyGreeterHandler(context.Background(), gwmux, conn)
if err != nil {
logger.Error("Failed to register gateway: " + err.Error())
os.Exit(1)
}
httpListener, err := net.Listen("tcp", fmt.Sprintf(":%d", options.HTTPPort))
if err != nil {
logger.Error("failed to listen HTTP: " + err.Error())
os.Exit(1)
}
s.GwServer = &http.Server{
Handler: gwmux,
ReadHeaderTimeout: 10 * time.Second,
}
logger.Info("serving gRPC-Gateway on " + httpListener.Addr().String())
go func() {
if err := s.GwServer.Serve(httpListener); err != nil {
if err != http.ErrServerClosed {
logger.Error("failed to serve HTTP: " + err.Error())
os.Exit(1)
} else {
logger.Info("HTTP server closed")
}
}
}()
s.HttpPort = httpListener.Addr().(*net.TCPAddr).Port
}