iris/middleware/pprof/pprof.go

60 lines
1.9 KiB
Go
Raw Normal View History

// Package pprof usage: app.Get(iris.RouteWildcardPath("/debug/pprof", "action"), pprof.New())
// for specific router adaptors follow these optional route syntax:
// 'adaptors/httprouter':
//
// app := iris.New()
// app.Adapt(httprouter.New())
// app.Get("/debug/pprof/*action", pprof.New())
//
// 'adaptors/gorillamux':
//
// app := iris.New()
// app.Adapt(gorillamux.New())
// app.Get("/debug/pprof/{action:.*}", pprof.New())
package pprof
import (
"net/http/pprof"
"strings"
"gopkg.in/kataras/iris.v6"
)
// New returns a new pprof (profile, cmdline, symbol, goroutine, heap, threadcreate, debug/block) Middleware.
// Note: Route MUST have the last named parameter wildcard named '*action'
func New() iris.HandlerFunc {
indexHandler := iris.ToHandler(pprof.Index)
cmdlineHandler := iris.ToHandler(pprof.Cmdline)
profileHandler := iris.ToHandler(pprof.Profile)
symbolHandler := iris.ToHandler(pprof.Symbol)
goroutineHandler := iris.ToHandler(pprof.Handler("goroutine"))
heapHandler := iris.ToHandler(pprof.Handler("heap"))
threadcreateHandler := iris.ToHandler(pprof.Handler("threadcreate"))
debugBlockHandler := iris.ToHandler(pprof.Handler("block"))
return iris.HandlerFunc(func(ctx *iris.Context) {
ctx.SetContentType("text/html; charset=" + ctx.Framework().Config.Charset)
action := ctx.Param("action")
if len(action) > 1 {
if strings.Contains(action, "cmdline") {
cmdlineHandler.Serve((ctx))
} else if strings.Contains(action, "profile") {
profileHandler.Serve(ctx)
} else if strings.Contains(action, "symbol") {
symbolHandler.Serve(ctx)
} else if strings.Contains(action, "goroutine") {
goroutineHandler.Serve(ctx)
} else if strings.Contains(action, "heap") {
heapHandler.Serve(ctx)
} else if strings.Contains(action, "threadcreate") {
threadcreateHandler.Serve(ctx)
} else if strings.Contains(action, "debug/block") {
debugBlockHandler.Serve(ctx)
}
} else {
indexHandler.Serve(ctx)
}
})
}