implement graceful shutdown

This commit is contained in:
2026-05-31 19:39:33 -05:00
parent a6317d1be5
commit 9103078b5a
+32 -1
View File
@@ -1,9 +1,13 @@
package main
import (
"context"
"log"
"os"
"os/signal"
"strconv"
"syscall"
"time"
"github.com/Henelik/cms/internal/content"
"github.com/Henelik/cms/pkg/config"
@@ -37,5 +41,32 @@ func main() {
content.RegisterRoutes(app)
public.RegisterRoutes(app)
app.Listen(":" + strconv.Itoa(cfg.ServerPort))
go func() {
if err := app.Listen(":" + strconv.Itoa(cfg.ServerPort)); err != nil {
log.Panic(err.Error())
}
}()
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
log.Println("shutting down server...")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := app.ShutdownWithContext(ctx); err != nil {
log.Printf("server forced to shutdown: %v", err)
}
if sqlDB, err := db.DB(); err == nil {
if err := sqlDB.Close(); err != nil {
log.Printf("failed to close database: %v", err)
}
} else {
log.Printf("failed to get underlying sql.DB: %v", err)
}
log.Println("server exited")
}