refactor: relocate run group initialization

Signed-off-by: Mark Sagi-Kazar <mark.sagikazar@gmail.com>
This commit is contained in:
Mark Sagi-Kazar 2021-02-25 12:32:28 +01:00
parent 3c5a631ce3
commit 9cffca70f2
No known key found for this signature in database
GPG key ID: 34CC109EB5ED1C2A

View file

@ -73,27 +73,6 @@ func commandServe() *cobra.Command {
return cmd return cmd
} }
func listenAndShutdownGracefully(logger log.Logger, gr *run.Group, srv *http.Server, name string) error {
l, err := net.Listen("tcp", srv.Addr)
if err != nil {
return fmt.Errorf("listening (%s) on %s: %v", name, srv.Addr, err)
}
gr.Add(func() error {
logger.Infof("listening (%s) on %s", name, srv.Addr)
return srv.Serve(l)
}, func(err error) {
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
logger.Debugf("starting graceful shutdown (%s)", name)
if err := srv.Shutdown(ctx); err != nil {
logger.Errorf("graceful shutdown (%s): %v", name, err)
}
})
return nil
}
func runServe(options serveOptions) error { func runServe(options serveOptions) error {
configFile := options.config configFile := options.config
configData, err := ioutil.ReadFile(configFile) configData, err := ioutil.ReadFile(configFile)
@ -355,27 +334,77 @@ func runServe(options serveOptions) error {
}) })
var gr run.Group var gr run.Group
// Set up telemetry server
if c.Telemetry.HTTP != "" { if c.Telemetry.HTTP != "" {
telemetrySrv := &http.Server{Addr: c.Telemetry.HTTP, Handler: telemetryRouter} const name = "telemetry"
defer telemetrySrv.Close() logger.Infof("listening (%s) on %s", name, c.Telemetry.HTTP)
if err := listenAndShutdownGracefully(logger, &gr, telemetrySrv, "http/telemetry"); err != nil {
return err l, err := net.Listen("tcp", c.Telemetry.HTTP)
} if err != nil {
return fmt.Errorf("listening (%s) on %s: %v", name, c.Telemetry.HTTP, err)
} }
server := &http.Server{
Handler: telemetryRouter,
}
defer server.Close()
gr.Add(func() error {
return server.Serve(l)
}, func(err error) {
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
logger.Debugf("starting graceful shutdown (%s)", name)
if err := server.Shutdown(ctx); err != nil {
logger.Errorf("graceful shutdown (%s): %v", name, err)
}
})
}
// Set up http server
if c.Web.HTTP != "" { if c.Web.HTTP != "" {
httpSrv := &http.Server{Addr: c.Web.HTTP, Handler: serv} const name = "http"
defer httpSrv.Close() logger.Infof("listening (%s) on %s", name, c.Web.HTTP)
if err := listenAndShutdownGracefully(logger, &gr, httpSrv, "http"); err != nil {
return err l, err := net.Listen("tcp", c.Web.HTTP)
} if err != nil {
return fmt.Errorf("listening (%s) on %s: %v", name, c.Web.HTTP, err)
} }
server := &http.Server{
Handler: serv,
}
defer server.Close()
gr.Add(func() error {
return server.Serve(l)
}, func(err error) {
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
logger.Debugf("starting graceful shutdown (%s)", name)
if err := server.Shutdown(ctx); err != nil {
logger.Errorf("graceful shutdown (%s): %v", name, err)
}
})
}
// Set up https server
if c.Web.HTTPS != "" { if c.Web.HTTPS != "" {
httpsSrv := &http.Server{ const name = "https"
Addr: c.Web.HTTPS,
logger.Infof("listening (%s) on %s", name, c.Web.HTTPS)
l, err := net.Listen("tcp", c.Web.HTTPS)
if err != nil {
return fmt.Errorf("listening (%s) on %s: %v", name, c.Web.HTTPS, err)
}
server := &http.Server{
Handler: serv, Handler: serv,
TLSConfig: &tls.Config{ TLSConfig: &tls.Config{
CipherSuites: allowedTLSCiphers, CipherSuites: allowedTLSCiphers,
@ -383,14 +412,25 @@ func runServe(options serveOptions) error {
MinVersion: tls.VersionTLS12, MinVersion: tls.VersionTLS12,
}, },
} }
defer server.Close()
defer httpsSrv.Close() gr.Add(func() error {
if err := listenAndShutdownGracefully(logger, &gr, httpsSrv, "https"); err != nil { return server.ServeTLS(l, c.Web.TLSCert, c.Web.TLSKey)
return err }, func(err error) {
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
logger.Debugf("starting graceful shutdown (%s)", name)
if err := server.Shutdown(ctx); err != nil {
logger.Errorf("graceful shutdown (%s): %v", name, err)
} }
})
} }
// Set up grpc server
if c.GRPC.Addr != "" { if c.GRPC.Addr != "" {
logger.Infof("listening (grpc) on %s", c.GRPC.Addr)
grpcListener, err := net.Listen("tcp", c.GRPC.Addr) grpcListener, err := net.Listen("tcp", c.GRPC.Addr)
if err != nil { if err != nil {
return fmt.Errorf("listening (grcp) on %s: %w", c.GRPC.Addr, err) return fmt.Errorf("listening (grcp) on %s: %w", c.GRPC.Addr, err)
@ -406,7 +446,6 @@ func runServe(options serveOptions) error {
} }
gr.Add(func() error { gr.Add(func() error {
logger.Infof("listening (grpc) on %s", c.GRPC.Addr)
return grpcSrv.Serve(grpcListener) return grpcSrv.Serve(grpcListener)
}, func(err error) { }, func(err error) {
logger.Debugf("starting graceful shutdown (grpc)") logger.Debugf("starting graceful shutdown (grpc)")