mirror of
https://github.com/zoriya/Kyoo.git
synced 2026-01-12 07:00:28 -05:00
61 lines
1.8 KiB
Go
61 lines
1.8 KiB
Go
package api
|
|
|
|
import (
|
|
// Important: simply import the pprof package to register its with a default HTTP mux, if one is defined.
|
|
// This is done in the init function of the pprof package, and is unavoidable.
|
|
// This package should not use the default HTTP mux to prevent accidentially enabling these endpoints.
|
|
"net/http"
|
|
"net/http/pprof"
|
|
"os"
|
|
runtimepprof "runtime/pprof"
|
|
"strconv"
|
|
|
|
"github.com/labstack/echo/v4"
|
|
)
|
|
|
|
// This is similar to https://github.com/sevennt/echo-pprof/blob/master/pprof.go.
|
|
// Unfortunately, this library is not maintained anymore and doesn't support echo v4.
|
|
// It also hard-codes codes all pprof handlers, which sometimes change when new profiles are added.
|
|
|
|
func RegisterPProfHandlers(e *echo.Echo) {
|
|
enablePProf := false
|
|
if enablePProfVar, ok := os.LookupEnv("ENABLE_PPROF_ENDPOINT"); ok {
|
|
enablePProf, _ = strconv.ParseBool(enablePProfVar)
|
|
}
|
|
|
|
if !enablePProf {
|
|
return
|
|
}
|
|
|
|
prefix := "/debug/pprof" // Standard prefix for pprof
|
|
g := e.Group(prefix)
|
|
|
|
routers := map[string]http.HandlerFunc{
|
|
"": pprof.Index,
|
|
"/": pprof.Index,
|
|
"/cmdline": pprof.Cmdline,
|
|
"/profile": pprof.Profile,
|
|
"/symbol": pprof.Symbol,
|
|
"/trace": pprof.Trace,
|
|
}
|
|
|
|
// Handle all profiles supported by the Go runtime
|
|
// These are not hard-coded so that this function does not need to be updated
|
|
// when new profiles are added in the future.
|
|
for _, profile := range runtimepprof.Profiles() {
|
|
profileName := profile.Name()
|
|
path := "/" + profileName
|
|
routers[path] = pprof.Handler(profileName).ServeHTTP
|
|
}
|
|
|
|
for path, handler := range routers {
|
|
handler := func(ctx echo.Context) error {
|
|
handler(ctx.Response().Writer, ctx.Request())
|
|
return nil
|
|
}
|
|
|
|
// The pprof handlers will accept/reject specific methods if needed.
|
|
g.Any(path, handler)
|
|
}
|
|
}
|