commit bb4e5741a722ac816cff51a681d05bed0c2257d8
parent 3fd6bd2c993eb4254b92cd58431685ade9d71534
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Tue, 23 May 2023 20:21:28 -0700
graceful shutdown
Diffstat:
1 file changed, 25 insertions(+), 3 deletions(-)
diff --git a/pkg/web/web.go b/pkg/web/web.go
@@ -21,6 +21,8 @@ import (
yaml "gopkg.in/yaml.v1"
"net"
"net/http"
+ "os"
+ "os/signal"
"regexp"
"strconv"
"strings"
@@ -338,11 +340,31 @@ func startTorServer(db *database.DkfDB, host string, port int) {
}
func startServer(e *echo.Echo, address string) {
- if err := e.Start(address); err != nil {
- if err != http.ErrServerClosed {
- logrus.Error(err)
+ serverError := make(chan struct{})
+
+ utils.SGo(func() {
+ if err := e.Start(address); err != nil {
+ if err != http.ErrServerClosed {
+ logrus.Error(err)
+ }
}
+ })
+
+ // Wait for interrupt signal to gracefully shutdown the server with
+ // a timeout of 10 seconds.
+ quit := make(chan os.Signal)
+ signal.Notify(quit, os.Interrupt)
+ select {
+ case <-quit:
+ case <-serverError:
+ }
+ logrus.Info("graceful shutdown")
+ ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
+ defer cancel()
+ if err := e.Shutdown(ctx); err != nil {
+ logrus.Errorf("graceful shutdown failed: %s", err.Error())
}
+ logrus.Info("Bye!")
}
// Start ...