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
	 Grail Finder
					Grail Finder