mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2025-06-05 21:59:39 +02:00
Add support for running profiling when debug build-tags provided (#491)
* wrap root HTTP handler in debug.WithPprof(), rearrange router.Start() to support this * remove unused code * set debug buildtag in build script when $DEBUG set * update go-debug version with fixed handler * use clone of router.srv for LE cert manager, reset server timeouts in debug * add kim's other libraries to README
This commit is contained in:
63
vendor/codeberg.org/gruf/go-debug/pprof_on.go
generated
vendored
Normal file
63
vendor/codeberg.org/gruf/go-debug/pprof_on.go
generated
vendored
Normal file
@ -0,0 +1,63 @@
|
||||
//go:build debug || debugenv
|
||||
// +build debug debugenv
|
||||
|
||||
package debug
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"net/http/pprof"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// ServePprof will start an HTTP server serving /debug/pprof only if debug enabled.
|
||||
func ServePprof(addr string) error {
|
||||
if !debug {
|
||||
// debug disabled in env
|
||||
return nil
|
||||
}
|
||||
handler := WithPprof(nil)
|
||||
return http.ListenAndServe(addr, handler)
|
||||
}
|
||||
|
||||
// WithPprof will add /debug/pprof handling (provided by "net/http/pprof") only if debug enabled.
|
||||
func WithPprof(handler http.Handler) http.Handler {
|
||||
if !debug {
|
||||
// debug disabled in env
|
||||
return handler
|
||||
}
|
||||
|
||||
// Default serve mux is setup with pprof
|
||||
pprofmux := http.DefaultServeMux
|
||||
|
||||
if pprofmux == nil {
|
||||
// Someone nil'ed the default mux
|
||||
pprofmux = &http.ServeMux{}
|
||||
pprofmux.HandleFunc("/debug/pprof/", pprof.Index)
|
||||
pprofmux.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
|
||||
pprofmux.HandleFunc("/debug/pprof/profile", pprof.Profile)
|
||||
pprofmux.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
|
||||
pprofmux.HandleFunc("/debug/pprof/trace", pprof.Trace)
|
||||
}
|
||||
|
||||
if handler == nil {
|
||||
// Ensure handler is non-nil
|
||||
handler = http.NotFoundHandler()
|
||||
}
|
||||
|
||||
// Debug enabled, return wrapped handler func
|
||||
return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
|
||||
const prefix = "/debug/pprof"
|
||||
|
||||
// /debug/pprof(/.*)? -> pass to pprofmux
|
||||
if strings.HasPrefix(r.URL.Path, prefix) {
|
||||
path := r.URL.Path[len(prefix):]
|
||||
if path == "" || path[0] == '/' {
|
||||
pprofmux.ServeHTTP(rw, r)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// .* -> pass to handler
|
||||
handler.ServeHTTP(rw, r)
|
||||
})
|
||||
}
|
Reference in New Issue
Block a user