71 lines
1.7 KiB
Go
71 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/XingfenD/yoresee_doc/internal/bootstrap"
|
|
"github.com/XingfenD/yoresee_doc/internal/config"
|
|
"github.com/XingfenD/yoresee_doc/internal/transport/connectserver"
|
|
"github.com/XingfenD/yoresee_doc/internal/utils"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
func main() {
|
|
initializer := bootstrap.NewInitializer().
|
|
InitConfig().
|
|
InitPostgres().
|
|
InitRedis().
|
|
InitConsul().
|
|
RequireConsulEnabled().
|
|
InitMinio().
|
|
InitElasticsearchAllowFail().
|
|
InitMQ().
|
|
InitRepository().
|
|
InitService()
|
|
if err := initializer.Err(); err != nil {
|
|
logrus.Fatalf("Init backend failed: %v", err)
|
|
}
|
|
|
|
grpcServer, grpcWebServer, err := connectserver.Start(
|
|
config.GlobalConfig.Server.GrpcPort,
|
|
config.GlobalConfig.Server.GrpcWebPort,
|
|
initializer.Repositories.DB,
|
|
initializer.Repositories.Redis,
|
|
initializer.Repositories,
|
|
)
|
|
if err != nil {
|
|
logrus.Fatalf("Start connect servers failed: %v", err)
|
|
}
|
|
|
|
waitForShutdown(initializer, grpcServer, grpcWebServer)
|
|
}
|
|
|
|
func waitForShutdown(initializer *bootstrap.Initializer, grpcServer, grpcWebServer *http.Server) {
|
|
signalCtx, stop := utils.ShutdownContext()
|
|
defer stop()
|
|
|
|
<-signalCtx.Done()
|
|
logrus.Info("Shutdown signal received, start draining")
|
|
connectserver.SetDraining(true)
|
|
|
|
shutdownServer("grpc-web", grpcWebServer, 10*time.Second)
|
|
shutdownServer("grpc", grpcServer, 10*time.Second)
|
|
|
|
initializer.Shutdown()
|
|
}
|
|
|
|
func shutdownServer(name string, server *http.Server, timeout time.Duration) {
|
|
if server == nil {
|
|
return
|
|
}
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), timeout)
|
|
defer cancel()
|
|
|
|
if err := server.Shutdown(ctx); err != nil {
|
|
logrus.Errorf("Shutdown %s server failed: %v", name, err)
|
|
}
|
|
}
|