Feat: graceful shutdown
This commit is contained in:
30
main.go
30
main.go
@ -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()
|
||||
}
|
||||
|
Reference in New Issue
Block a user