diff options
author | Mike Crute <mike@crute.us> | 2023-10-30 07:44:27 -0700 |
---|---|---|
committer | Mike Crute <mike@crute.us> | 2023-10-30 07:44:27 -0700 |
commit | e1a7fd00e8c5e3ddd82f696bc359066912d3417e (patch) | |
tree | b96ec1a15c9beb3333e2ba01a4d0b83c1cbe3aac | |
parent | 7e0e66aa495fe2c51988704d40635ebd452c55bf (diff) | |
download | golib-e1a7fd00e8c5e3ddd82f696bc359066912d3417e.tar.bz2 golib-e1a7fd00e8c5e3ddd82f696bc359066912d3417e.tar.xz golib-e1a7fd00e8c5e3ddd82f696bc359066912d3417e.zip |
echo: add pprof middleware in debug modeecho/v0.16.1
-rw-r--r-- | echo/echo_default.go | 4 | ||||
-rw-r--r-- | echo/middleware/pprof.go | 38 |
2 files changed, 42 insertions, 0 deletions
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) { | |||
92 | e := echo.New() | 92 | e := echo.New() |
93 | e.Debug = debug | 93 | e.Debug = debug |
94 | 94 | ||
95 | if e.Debug { | ||
96 | glmw.RegisterPprof(e) | ||
97 | } | ||
98 | |||
95 | e.Logger.SetLevel(log.INFO) | 99 | e.Logger.SetLevel(log.INFO) |
96 | if debug { | 100 | if debug { |
97 | e.Logger.SetLevel(log.DEBUG) | 101 | 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 @@ | |||
1 | package middleware | ||
2 | |||
3 | import ( | ||
4 | "net/http" | ||
5 | "net/http/pprof" | ||
6 | |||
7 | "github.com/labstack/echo/v4" | ||
8 | ) | ||
9 | |||
10 | func RegisterPprof(e *echo.Echo, prefixOptions ...string) { | ||
11 | prefix := "/debug/pprof" | ||
12 | if len(prefixOptions) > 0 { | ||
13 | prefix = prefixOptions[0] | ||
14 | } | ||
15 | |||
16 | prefixRouter := e.Group(prefix) | ||
17 | { | ||
18 | prefixRouter.GET("/", pprofAdapter(pprof.Index)) | ||
19 | prefixRouter.GET("/allocs", pprofAdapter(pprof.Handler("allocs").ServeHTTP)) | ||
20 | prefixRouter.GET("/block", pprofAdapter(pprof.Handler("block").ServeHTTP)) | ||
21 | prefixRouter.GET("/cmdline", pprofAdapter(pprof.Cmdline)) | ||
22 | prefixRouter.GET("/goroutine", pprofAdapter(pprof.Handler("goroutine").ServeHTTP)) | ||
23 | prefixRouter.GET("/heap", pprofAdapter(pprof.Handler("heap").ServeHTTP)) | ||
24 | prefixRouter.GET("/mutex", pprofAdapter(pprof.Handler("mutex").ServeHTTP)) | ||
25 | prefixRouter.GET("/profile", pprofAdapter(pprof.Profile)) | ||
26 | prefixRouter.POST("/symbol", pprofAdapter(pprof.Symbol)) | ||
27 | prefixRouter.GET("/symbol", pprofAdapter(pprof.Symbol)) | ||
28 | prefixRouter.GET("/threadcreate", pprofAdapter(pprof.Handler("threadcreate").ServeHTTP)) | ||
29 | prefixRouter.GET("/trace", pprofAdapter(pprof.Trace)) | ||
30 | } | ||
31 | } | ||
32 | |||
33 | func pprofAdapter(h http.HandlerFunc) echo.HandlerFunc { | ||
34 | return func(c echo.Context) error { | ||
35 | h.ServeHTTP(c.Response().Writer, c.Request()) | ||
36 | return nil | ||
37 | } | ||
38 | } | ||