app: only wire up debug server if set

Fixes #2871

Signed-off-by: Kristoffer Dalby <kristoffer@dalby.cc>
This commit is contained in:
Shourya Gautam
2025-11-23 12:27:51 +05:30
committed by Kristoffer Dalby
parent f0e464dc36
commit 56bec66a44

View File

@@ -730,16 +730,27 @@ func (h *Headscale) Serve() error {
log.Info(). log.Info().
Msgf("listening and serving HTTP on: %s", h.cfg.Addr) Msgf("listening and serving HTTP on: %s", h.cfg.Addr)
debugHTTPListener, err := net.Listen("tcp", h.cfg.MetricsAddr) // Only start debug/metrics server if address is configured
if err != nil { var debugHTTPServer *http.Server
return fmt.Errorf("failed to bind to TCP address: %w", err)
var debugHTTPListener net.Listener
if h.cfg.MetricsAddr != "" {
debugHTTPListener, err = (&net.ListenConfig{}).Listen(ctx, "tcp", h.cfg.MetricsAddr)
if err != nil {
return fmt.Errorf("failed to bind to TCP address: %w", err)
}
debugHTTPServer = h.debugHTTPServer()
errorGroup.Go(func() error { return debugHTTPServer.Serve(debugHTTPListener) })
log.Info().
Msgf("listening and serving debug and metrics on: %s", h.cfg.MetricsAddr)
} else {
log.Info().Msg("metrics server disabled (metrics_listen_addr is empty)")
} }
debugHTTPServer := h.debugHTTPServer()
errorGroup.Go(func() error { return debugHTTPServer.Serve(debugHTTPListener) })
log.Info().
Msgf("listening and serving debug and metrics on: %s", h.cfg.MetricsAddr)
var tailsqlContext context.Context var tailsqlContext context.Context
if tailsqlEnabled { if tailsqlEnabled {
@@ -795,16 +806,25 @@ func (h *Headscale) Serve() error {
h.ephemeralGC.Close() h.ephemeralGC.Close()
// Gracefully shut down servers // Gracefully shut down servers
ctx, cancel := context.WithTimeout( shutdownCtx, cancel := context.WithTimeout(
context.Background(), context.WithoutCancel(ctx),
types.HTTPShutdownTimeout, types.HTTPShutdownTimeout,
) )
info("shutting down debug http server") defer cancel()
if err := debugHTTPServer.Shutdown(ctx); err != nil {
log.Error().Err(err).Msg("failed to shutdown prometheus http") if debugHTTPServer != nil {
info("shutting down debug http server")
err := debugHTTPServer.Shutdown(shutdownCtx)
if err != nil {
log.Error().Err(err).Msg("failed to shutdown prometheus http")
}
} }
info("shutting down main http server") info("shutting down main http server")
if err := httpServer.Shutdown(ctx); err != nil {
err := httpServer.Shutdown(shutdownCtx)
if err != nil {
log.Error().Err(err).Msg("failed to shutdown http") log.Error().Err(err).Msg("failed to shutdown http")
} }
@@ -830,7 +850,10 @@ func (h *Headscale) Serve() error {
// Close network listeners // Close network listeners
info("closing network listeners") info("closing network listeners")
debugHTTPListener.Close()
if debugHTTPListener != nil {
debugHTTPListener.Close()
}
httpListener.Close() httpListener.Close()
grpcGatewayConn.Close() grpcGatewayConn.Close()
@@ -848,9 +871,6 @@ func (h *Headscale) Serve() error {
log.Info(). log.Info().
Msg("Headscale stopped") Msg("Headscale stopped")
// And we're done:
cancel()
return return
} }
} }