package app import ( "context" "go.mongodb.org/mongo-driver/mongo" "go.uber.org/zap" "os" "os/signal" "penahub.gitlab.yandexcloud.net/backend/verification/internal/server" "syscall" ) func gracefulShutdown(ctx context.Context, logger *zap.Logger, httpSrvs []*server.Server, mongoDB *mongo.Database) { interrupt := make(chan os.Signal, 1) signal.Notify(interrupt, os.Interrupt, syscall.SIGTERM) killSignal := <-interrupt switch killSignal { case os.Interrupt: logger.Info("AppInterrupted") case syscall.SIGTERM: logger.Info("AppTerminated") } for _, srv := range httpSrvs { if err := srv.Shutdown(ctx); err != nil { logger.Error("HttpServerShutdown", zap.Error(err)) } } if err := mongoDB.Client().Disconnect(ctx); err != nil { logger.Error("MongoDB", zap.Error(err)) } }