mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 01:02:25 -05: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:
		
					parent
					
						
							
								420e2fb22b
							
						
					
				
			
			
				commit
				
					
						69011d4901
					
				
			
		
					 15 changed files with 248 additions and 37 deletions
				
			
		
							
								
								
									
										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) | ||||
| 	}) | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue