fix: Graceful shutdown

This commit is contained in:
Adrien Kohlbecker 2025-04-14 15:24:55 +02:00 committed by Henrique Dias
parent 8b8fb3343f
commit 8230eb7ab5

View File

@ -1,6 +1,7 @@
package cmd package cmd
import ( import (
"context"
"crypto/tls" "crypto/tls"
"errors" "errors"
"io" "io"
@ -13,6 +14,7 @@ import (
"path/filepath" "path/filepath"
"strings" "strings"
"syscall" "syscall"
"time"
homedir "github.com/mitchellh/go-homedir" homedir "github.com/mitchellh/go-homedir"
"github.com/spf13/afero" "github.com/spf13/afero"
@ -167,10 +169,6 @@ user created with the credentials from options "username" and "password".`,
checkErr(err) checkErr(err)
} }
sigc := make(chan os.Signal, 1)
signal.Notify(sigc, os.Interrupt, syscall.SIGTERM)
go cleanupHandler(listener, sigc)
assetsFs, err := fs.Sub(frontend.Assets(), "dist") assetsFs, err := fs.Sub(frontend.Assets(), "dist")
if err != nil { if err != nil {
panic(err) panic(err)
@ -182,18 +180,29 @@ user created with the credentials from options "username" and "password".`,
defer listener.Close() defer listener.Close()
log.Println("Listening on", listener.Addr().String()) log.Println("Listening on", listener.Addr().String())
//nolint: gosec srv := &http.Server{Handler: handler}
if err := http.Serve(listener, handler); err != nil {
log.Fatal(err) go func() {
} if err := srv.Serve(listener); !errors.Is(err, http.ErrServerClosed) {
}, pythonConfig{allowNoDB: true}), log.Fatalf("HTTP server error: %v", err)
} }
func cleanupHandler(listener net.Listener, c chan os.Signal) { log.Println("Stopped serving new connections.")
sig := <-c }()
log.Printf("Caught signal %s: shutting down.", sig)
listener.Close() sigc := make(chan os.Signal, 1)
os.Exit(0) signal.Notify(sigc, os.Interrupt, syscall.SIGTERM)
<-sigc
shutdownCtx, shutdownRelease := context.WithTimeout(context.Background(), 10*time.Second)
defer shutdownRelease()
if err := srv.Shutdown(shutdownCtx); err != nil {
log.Fatalf("HTTP shutdown error: %v", err)
}
log.Println("Graceful shutdown complete.")
}, pythonConfig{allowNoDB: true}),
} }
//nolint:gocyclo //nolint:gocyclo