mirror of
https://github.com/stefanprodan/podinfo.git
synced 2026-03-02 18:10:20 +00:00
49 lines
1.0 KiB
Go
49 lines
1.0 KiB
Go
package grpc
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
|
|
"go.uber.org/zap"
|
|
"google.golang.org/grpc"
|
|
"google.golang.org/grpc/health"
|
|
"google.golang.org/grpc/health/grpc_health_v1"
|
|
"google.golang.org/grpc/reflection"
|
|
)
|
|
|
|
type Server struct {
|
|
logger *zap.Logger
|
|
config *Config
|
|
}
|
|
|
|
type Config struct {
|
|
Port int `mapstructure:"grpc-port"`
|
|
ServiceName string `mapstructure:"grpc-service-name"`
|
|
}
|
|
|
|
func NewServer(config *Config, logger *zap.Logger) (*Server, error) {
|
|
srv := &Server{
|
|
logger: logger,
|
|
config: config,
|
|
}
|
|
|
|
return srv, nil
|
|
}
|
|
|
|
func (s *Server) ListenAndServe() {
|
|
listener, err := net.Listen("tcp", fmt.Sprintf(":%v", s.config.Port))
|
|
if err != nil {
|
|
s.logger.Fatal("failed to listen", zap.Int("port", s.config.Port))
|
|
}
|
|
|
|
srv := grpc.NewServer()
|
|
server := health.NewServer()
|
|
reflection.Register(srv)
|
|
grpc_health_v1.RegisterHealthServer(srv, server)
|
|
server.SetServingStatus(s.config.ServiceName, grpc_health_v1.HealthCheckResponse_SERVING)
|
|
|
|
if err := srv.Serve(listener); err != nil {
|
|
s.logger.Fatal("failed to serve", zap.Error(err))
|
|
}
|
|
}
|