aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Crute <mike@crute.us>2023-10-30 07:44:27 -0700
committerMike Crute <mike@crute.us>2023-10-30 07:44:27 -0700
commite1a7fd00e8c5e3ddd82f696bc359066912d3417e (patch)
treeb96ec1a15c9beb3333e2ba01a4d0b83c1cbe3aac
parent7e0e66aa495fe2c51988704d40635ebd452c55bf (diff)
downloadgolib-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.go4
-rw-r--r--echo/middleware/pprof.go38
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 @@
1package middleware
2
3import (
4 "net/http"
5 "net/http/pprof"
6
7 "github.com/labstack/echo/v4"
8)
9
10func 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
33func 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}