From 8de357d4dca4a8f7cda9af9fbcb2386775e5bd1c Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 5 Jan 2018 17:59:08 +0200 Subject: [PATCH] graceful shutdown --- cmd/podinfo/main.go | 55 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 cmd/podinfo/main.go diff --git a/cmd/podinfo/main.go b/cmd/podinfo/main.go new file mode 100644 index 0000000..9b351bd --- /dev/null +++ b/cmd/podinfo/main.go @@ -0,0 +1,55 @@ +package main + +import ( + "context" + "flag" + "net/http" + "time" + + "github.com/golang/glog" + "github.com/stefanprodan/k8s-podinfo/pkg/server" + "github.com/stefanprodan/k8s-podinfo/pkg/signals" +) + +var ( + port string +) + +func init() { + flag.StringVar(&port, "port", "8989", "Port to listen on.") +} + +func main() { + + flag.Parse() + + glog.Infof("Starting HTTP server on port %v", port) + + hts := &http.Server{ + Addr: ":" + port, + Handler: server.New(), + } + + go func() { + if err := hts.ListenAndServe(); err != http.ErrServerClosed { + glog.Fatal(err) + } + }() + shutdown(hts, 10*time.Second) +} + +func shutdown(hs *http.Server, timeout time.Duration) { + stopCh := signals.SetupSignalHandler() + <-stopCh + + ctx, cancel := context.WithTimeout(context.Background(), timeout) + defer cancel() + + glog.Infof("Shutdown with timeout: %s", timeout) + + if err := hs.Shutdown(ctx); err != nil { + glog.Errorf("Error: %v\n", err) + } else { + glog.Info("HTTP server stopped") + } +}