Skip to content

Commit 4249ab0

Browse files
committed
✨ feat: Add Graceful shutdown
1 parent 2d0ae29 commit 4249ab0

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

cmd/main.go

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ import (
55
"flag"
66
"fmt"
77
"log/slog"
8+
"net/http"
89
"os"
10+
"os/signal"
911
"time"
1012

1113
"semantic-search/api"
@@ -93,7 +95,31 @@ func main() {
9395
e.GET("/search", bookHandler.SearchBooks)
9496
e.POST("/books", bookHandler.AddBook)
9597

96-
e.Logger.Fatal(e.Start(fmt.Sprintf(":%d", cfg.port)))
98+
// e.Logger.Fatal(e.Start(fmt.Sprintf(":%d", cfg.port)))
99+
100+
quitectx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
101+
defer stop()
102+
103+
srvAddr := fmt.Sprintf(":%d", cfg.port)
104+
105+
go func() {
106+
if err := e.Start(srvAddr); err != nil && err != http.ErrServerClosed {
107+
logger.Error("Unexpected server shutdown", "error", err)
108+
os.Exit(1)
109+
}
110+
}()
111+
112+
<-quitectx.Done()
113+
logger.Debug("Interrupt received")
114+
115+
shutdownCtx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
116+
defer cancel()
117+
118+
if err := e.Shutdown(shutdownCtx); err != nil {
119+
logger.Error("Server didn't shut down gracefully — something's still hanging!", "error", err)
120+
} else {
121+
logger.Info("Server shut down cleanly. Goodbye!")
122+
}
97123
}
98124

99125
func loadConfig() config {

0 commit comments

Comments
 (0)