From b57d1b2d2f93be2a97e51997958ee694dafb16c6 Mon Sep 17 00:00:00 2001 From: Jan-Lukas Else Date: Tue, 28 Jul 2020 21:52:56 +0200 Subject: [PATCH] Graceful shutdown --- http.go | 21 ++++++++++++++++++++- main.go | 6 +++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/http.go b/http.go index 039a372..c03b77f 100644 --- a/http.go +++ b/http.go @@ -1,10 +1,15 @@ package main import ( + "context" "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" + "log" "net/http" + "os" + "os/signal" "strconv" + "time" ) func startServer() { @@ -19,7 +24,21 @@ func startServer() { e.GET("/*", servePost) address := ":" + strconv.Itoa(appConfig.server.port) - e.Logger.Fatal(e.Start(address)) + go func() { + if err := e.Start(address); err != nil { + log.Println("Shutting down the server") + } + }() + + // Wait for interrupt signal to gracefully shutdown the server with a timeout of 10 seconds. + quit := make(chan os.Signal, 1) + signal.Notify(quit, os.Interrupt) + <-quit + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + if err := e.Shutdown(ctx); err != nil { + e.Logger.Fatal(err) + } } func hello(c echo.Context) error { diff --git a/main.go b/main.go index db2fcde..e7adfe6 100644 --- a/main.go +++ b/main.go @@ -15,7 +15,11 @@ func main() { log.Fatal(err) } defer func() { - log.Fatal(closeDb()) + log.Println("Close database") + err := closeDb() + if err != nil { + log.Fatal(err) + } }() log.Println("Loaded database") log.Println("Start server")