From 113a02623d10988a725abc5ac8f4638d08ee572d Mon Sep 17 00:00:00 2001 From: "Lawrence, Rendall" Date: Tue, 6 Aug 2024 21:52:25 +0300 Subject: [PATCH] (minor) separate metrics server creation and start, allow pretty print log to file --- pkg/log/log.go | 7 +++---- pkg/metrics/server.go | 43 +++++++++++++++++++++++++++++-------------- 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/pkg/log/log.go b/pkg/log/log.go index 5df6a62..8ee5e2d 100644 --- a/pkg/log/log.go +++ b/pkg/log/log.go @@ -34,12 +34,11 @@ func ConfigureLogger(output, level string, formatted, colored bool) (err error) lvl := zerolog.WarnLevel output = strings.ToLower(output) var w io.Writer - var stdAny bool switch output { case "stderr", "": - w, stdAny = os.Stderr, true + w = os.Stderr case "stdout": - w, stdAny = os.Stdout, true + w = os.Stdout default: if w, err = os.OpenFile(output, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0o600); err == nil { customOutMu.Lock() @@ -52,7 +51,7 @@ func ConfigureLogger(output, level string, formatted, colored bool) (err error) return err } } - if stdAny && formatted { + if formatted { w = zerolog.ConsoleWriter{ Out: w, NoColor: !colored, diff --git a/pkg/metrics/server.go b/pkg/metrics/server.go index c3c0e06..8fe5ddf 100644 --- a/pkg/metrics/server.go +++ b/pkg/metrics/server.go @@ -36,7 +36,8 @@ func Enabled() bool { // Server represents a standalone HTTP server for serving a Prometheus metrics // endpoint. type Server struct { - srv *fasthttp.Server + listen string + srv *fasthttp.Server } // AddressFamily returns the label value for reporting the address family of an IP address. @@ -51,14 +52,37 @@ func AddressFamily(ip netip.Addr) string { } } +// Start starts metrics/profiling server +func (s *Server) Start() (err error) { + atomic.AddInt32(serverCounter, 1) + defer atomic.AddInt32(serverCounter, -1) + if err = s.srv.ListenAndServe(s.listen); err != nil { + if errors.Is(err, http.ErrServerClosed) { + err = nil + } else { + logger.Error().Err(err).Msg("failed while serving prometheus") + } + } + return err +} + // Close shuts down the server. func (s *Server) Close() error { return s.srv.Shutdown() } -// NewServer creates a new instance of a Prometheus server that asynchronously -// serves requests. +// NewServer creates new metrics/profiling server and starts it. +// Equivalent of New and async Server.Start. func NewServer(addr string) *Server { + s := New(addr) + go func() { + _ = s.Start() + }() + return s +} + +// New creates a new instance of a Prometheus and pprof +func New(addr string) *Server { if len(addr) == 0 { panic("metrics listen address not provided") } @@ -71,7 +95,8 @@ func NewServer(addr string) *Server { r.GET("/debug/pprof/symbol", fasthttpadaptor.NewFastHTTPHandlerFunc(pprof.Symbol)) r.GET("/debug/pprof/trace", fasthttpadaptor.NewFastHTTPHandlerFunc(pprof.Trace)) - s := &Server{ + return &Server{ + listen: addr, srv: &fasthttp.Server{ Handler: r.Handler, GetOnly: true, @@ -79,14 +104,4 @@ func NewServer(addr string) *Server { WriteTimeout: writeTimeout, }, } - - go func() { - atomic.AddInt32(serverCounter, 1) - defer atomic.AddInt32(serverCounter, -1) - if err := s.srv.ListenAndServe(addr); !errors.Is(err, http.ErrServerClosed) { - logger.Error().Err(err).Msg("failed while serving prometheus") - } - }() - - return s }