mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-30 21:12:24 -05:00 
			
		
		
		
	* 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
		
			
				
	
	
		
			63 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| //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)
 | |
| 	})
 | |
| }
 |