Feat: graceful shutdown

This commit is contained in:
Grail Finder
2025-06-15 09:51:25 +03:00
parent fa25679624
commit 30e322d9c6
6 changed files with 153 additions and 18 deletions

30
main.go
View File

@ -1,10 +1,15 @@
package main
import (
"context"
"gralias/config"
"gralias/handlers"
"gralias/pkg/cache"
"log/slog"
"net/http"
"os"
"os/signal"
"syscall"
"time"
)
@ -14,7 +19,7 @@ func init() {
cfg = config.LoadConfigOrDefault("")
}
func ListenToRequests(port string) error {
func ListenToRequests(port string) *http.Server {
mux := http.NewServeMux()
server := &http.Server{
Handler: handlers.LogRequests(handlers.GetSession(mux)),
@ -47,12 +52,27 @@ func ListenToRequests(port string) error {
// sse
mux.Handle("GET /sub/sse", handlers.Notifier)
slog.Info("Listening", "addr", port)
return server.ListenAndServe()
return server
}
func main() {
err := ListenToRequests(cfg.ServerConfig.Port)
if err != nil {
panic(err)
// Setup graceful shutdown
stop := make(chan os.Signal, 1)
signal.Notify(stop, os.Interrupt, syscall.SIGTERM)
server := ListenToRequests(cfg.ServerConfig.Port)
go func() {
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
panic(err)
}
}()
<-stop
slog.Info("Shutting down server...")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := server.Shutdown(ctx); err != nil {
slog.Error("server shutdown failed", "error", err)
}
cache.MemCache.BackupNow()
}