From f7e9fe7794444681f2daa70fe9701fd2c33ea88b Mon Sep 17 00:00:00 2001 From: H3ALY Date: Wed, 16 Apr 2025 10:24:54 +0100 Subject: [PATCH] make shutting down graceful --- main.go | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/main.go b/main.go index 8c48285..52c871c 100644 --- a/main.go +++ b/main.go @@ -1,8 +1,12 @@ package main import ( - "log" + "context" + "fmt" "net/http" + "os" + "os/signal" + "time" "synlotto-website/bootstrap" "synlotto-website/config" @@ -50,6 +54,30 @@ func main() { wrapped = middleware.SecureHeaders(wrapped) wrapped = middleware.Recover(wrapped) - log.Println("🌐 Running on http://localhost:8080") - http.ListenAndServe(":8080", wrapped) + addr := fmt.Sprintf("%s:%d", appState.Config.HttpServer.Address, appState.Config.HttpServer.Port) + srv := &http.Server{ + Addr: addr, + Handler: wrapped, + } + + go func() { + logging.Info("Server running at %s\n", addr) + if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { + logging.Error("Server error: %v", err) + } + }() + + quit := make(chan os.Signal, 1) + signal.Notify(quit, os.Interrupt) + <-quit + logging.Info("Shutting down server...") + + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + if err := srv.Shutdown(ctx); err != nil { + logging.Error("Forced shutdown: %v", err) + } + + logging.Info("Server shutdown complete") }