From 72a401528800ac9cad6cf1c73b8575f5e3696cc4 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Sun, 1 Mar 2020 18:10:02 +0100 Subject: [PATCH] token-validator: handle graceful shutdown --- token-validator/main.go | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/token-validator/main.go b/token-validator/main.go index d8b54fe..4075b22 100644 --- a/token-validator/main.go +++ b/token-validator/main.go @@ -1,12 +1,17 @@ package main import ( + "context" "flag" + "fmt" "log" "net/http" "net/url" + "os" + "os/signal" "path" "strings" + "syscall" ) var sharedSecret string @@ -91,9 +96,25 @@ func main() { log.Fatal("Cannot create database: ", err) } - // Serve content - log.Println("Ready, listening on", *bind) - if err := http.ListenAndServe(*bind, StripPrefix(*baseURL, Router())); err != nil { - log.Fatal("Unable to listen and serve: ", err) + // Prepare graceful shutdown + interrupt := make(chan os.Signal, 1) + signal.Notify(interrupt, os.Interrupt, syscall.SIGTERM) + + srv := &http.Server{ + Addr: *bind, + Handler: StripPrefix(*baseURL, Router()), } + + // Serve content + go func() { + log.Fatal(srv.ListenAndServe()) + }() + log.Println(fmt.Sprintf("Ready, listening on %s", *bind)) + + // Wait shutdown signal + <-interrupt + + log.Print("The service is shutting down...") + srv.Shutdown(context.Background()) + log.Println("done") }