package main import ( "context" "fmt" "log" "net/http" "os/signal" "syscall" //_ "template_blueprint/docs" _ "template_blueprint/cmd/api/docs" //_ "template_blueprint/internal/docs" "template_blueprint/internal/server" "time" ) func gracefulShutdown(apiServer *http.Server, done chan bool) { // Create context that listens for the interrupt signal from the OS. ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) defer stop() // Listen for the interrupt signal. <-ctx.Done() log.Println("shutting down gracefully, press Ctrl+C again to force") // The context is used to inform the server it has 5 seconds to finish // the request it is currently handling ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() if err := apiServer.Shutdown(ctx); err != nil { log.Printf("Server forced to shutdown with error: %v", err) } log.Println("Server exiting") // Notify the main goroutine that the shutdown is complete done <- true } // @title Tag Service API0 // @version 1.0 // @description A Tag service API in Go using Gin framework // @termsOfService https://tos.santoshk.dev // @contact.name Santosh Kumar // @contact.url https://twitter.com/sntshk // @contact.email sntshkmr60@gmail.com // @license.name Apache 2.0 // @license.url http://www.apache.org/licenses/LICENSE-2.0.html // @host 10.10.150.181:8084 // @BasePath /api func main() { //docs.SwaggerInfo.Title = "Swagger Example API" //docs.SwaggerInfo.Description = "This is a sample server Petstore server." //docs.SwaggerInfo.Version = "1.0" //docs.SwaggerInfo.Host = "petstore.swagger.io" //docs.SwaggerInfo.BasePath = "/v2" //docs.SwaggerInfo.Schemes = []string{"http", "https"} server := server.NewServer() // Create a done channel to signal when the shutdown is complete done := make(chan bool, 1) // Run graceful shutdown in a separate goroutine go gracefulShutdown(server, done) err := server.ListenAndServe() if err != nil && err != http.ErrServerClosed { panic(fmt.Sprintf("http server error: %s", err)) } // Wait for the graceful shutdown to complete <-done log.Println("Graceful shutdown complete.") }