From e1a7fd00e8c5e3ddd82f696bc359066912d3417e Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Mon, 30 Oct 2023 07:44:27 -0700 Subject: echo: add pprof middleware in debug mode --- echo/echo_default.go | 4 ++++ echo/middleware/pprof.go | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 echo/middleware/pprof.go diff --git a/echo/echo_default.go b/echo/echo_default.go index 681761a..b6d4fa2 100644 --- a/echo/echo_default.go +++ b/echo/echo_default.go @@ -92,6 +92,10 @@ func NewEchoWrapper(ctx context.Context, debug bool) (*EchoWrapper, error) { e := echo.New() e.Debug = debug + if e.Debug { + glmw.RegisterPprof(e) + } + e.Logger.SetLevel(log.INFO) if debug { e.Logger.SetLevel(log.DEBUG) diff --git a/echo/middleware/pprof.go b/echo/middleware/pprof.go new file mode 100644 index 0000000..cc69505 --- /dev/null +++ b/echo/middleware/pprof.go @@ -0,0 +1,38 @@ +package middleware + +import ( + "net/http" + "net/http/pprof" + + "github.com/labstack/echo/v4" +) + +func RegisterPprof(e *echo.Echo, prefixOptions ...string) { + prefix := "/debug/pprof" + if len(prefixOptions) > 0 { + prefix = prefixOptions[0] + } + + prefixRouter := e.Group(prefix) + { + prefixRouter.GET("/", pprofAdapter(pprof.Index)) + prefixRouter.GET("/allocs", pprofAdapter(pprof.Handler("allocs").ServeHTTP)) + prefixRouter.GET("/block", pprofAdapter(pprof.Handler("block").ServeHTTP)) + prefixRouter.GET("/cmdline", pprofAdapter(pprof.Cmdline)) + prefixRouter.GET("/goroutine", pprofAdapter(pprof.Handler("goroutine").ServeHTTP)) + prefixRouter.GET("/heap", pprofAdapter(pprof.Handler("heap").ServeHTTP)) + prefixRouter.GET("/mutex", pprofAdapter(pprof.Handler("mutex").ServeHTTP)) + prefixRouter.GET("/profile", pprofAdapter(pprof.Profile)) + prefixRouter.POST("/symbol", pprofAdapter(pprof.Symbol)) + prefixRouter.GET("/symbol", pprofAdapter(pprof.Symbol)) + prefixRouter.GET("/threadcreate", pprofAdapter(pprof.Handler("threadcreate").ServeHTTP)) + prefixRouter.GET("/trace", pprofAdapter(pprof.Trace)) + } +} + +func pprofAdapter(h http.HandlerFunc) echo.HandlerFunc { + return func(c echo.Context) error { + h.ServeHTTP(c.Response().Writer, c.Request()) + return nil + } +} -- cgit v1.2.3