-
Notifications
You must be signed in to change notification settings - Fork 0
/
pprof.go
120 lines (104 loc) · 2.8 KB
/
pprof.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package pprof_echo
import (
"net/http/pprof"
"strings"
"github.com/labstack/echo/v4"
)
// Wrap wraps default pprof endpoints into Echo compliant way
func Wrap(e *echo.Echo) {
wrapGroup(e.Group(""))
}
func wrapGroup(g *echo.Group) {
routers := []struct {
Method string
Path string
Handler echo.HandlerFunc
}{
{"GET", "/debug/pprof", indexHandler()},
{"GET", "/debug/heap", heapHandler()},
{"GET", "/debug/goroutine", goroutineHandler()},
{"GET", "/debug/block", blockHandler()},
{"GET", "/debug/threadcreate", threadCreateHandler()},
{"GET", "/debug/cmdline", cmdlineHandler()},
{"GET", "/debug/profile", profileHandler()},
{"GET", "/debug/symbol", symbolHandler()},
{"POST", "/debug/symbol", symbolHandler()},
{"GET", "/debug/trace", traceHandler()},
{"GET", "/debug/mutex", mutexHandler()},
{"GET", "/debug/allocs", allocsHandler()},
}
for _, r := range routers {
switch r.Method {
case "GET":
g.GET(strings.TrimPrefix(r.Path, ""), r.Handler)
case "POST":
g.POST(strings.TrimPrefix(r.Path, ""), r.Handler)
}
}
}
func indexHandler() echo.HandlerFunc {
return func(ctx echo.Context) error {
pprof.Index(ctx.Response().Writer, ctx.Request())
return nil
}
}
func allocsHandler() echo.HandlerFunc {
return func(ctx echo.Context) error {
pprof.Handler("allocs").ServeHTTP(ctx.Response().Writer, ctx.Request())
return nil
}
}
func heapHandler() echo.HandlerFunc {
return func(ctx echo.Context) error {
pprof.Handler("heap").ServeHTTP(ctx.Response(), ctx.Request())
return nil
}
}
func goroutineHandler() echo.HandlerFunc {
return func(ctx echo.Context) error {
pprof.Handler("goroutine").ServeHTTP(ctx.Response().Writer, ctx.Request())
return nil
}
}
func blockHandler() echo.HandlerFunc {
return func(ctx echo.Context) error {
pprof.Handler("block").ServeHTTP(ctx.Response().Writer, ctx.Request())
return nil
}
}
func threadCreateHandler() echo.HandlerFunc {
return func(ctx echo.Context) error {
pprof.Handler("threadcreate").ServeHTTP(ctx.Response().Writer, ctx.Request())
return nil
}
}
func cmdlineHandler() echo.HandlerFunc {
return func(ctx echo.Context) error {
pprof.Cmdline(ctx.Response().Writer, ctx.Request())
return nil
}
}
func profileHandler() echo.HandlerFunc {
return func(ctx echo.Context) error {
pprof.Profile(ctx.Response().Writer, ctx.Request())
return nil
}
}
func symbolHandler() echo.HandlerFunc {
return func(ctx echo.Context) error {
pprof.Symbol(ctx.Response().Writer, ctx.Request())
return nil
}
}
func traceHandler() echo.HandlerFunc {
return func(ctx echo.Context) error {
pprof.Trace(ctx.Response().Writer, ctx.Request())
return nil
}
}
func mutexHandler() echo.HandlerFunc {
return func(ctx echo.Context) error {
pprof.Handler("mutex").ServeHTTP(ctx.Response().Writer, ctx.Request())
return nil
}
}