forked from mirrors/gotosocial
acc95923da
* replace media workers with just runners.WorkerPool, move to state structure, use go-sched for global task scheduling * improved code comment * fix worker tryUntil function, update go-runners/go-sched * make preprocess functions package public, use these where possible to stop doubled up processing * remove separate emoji worker pool * limit calls to time.Now() during media preprocessing * use Processor{} to manage singular runtime of processing media * ensure workers get started when media manager is used * improved error setting in processing media, fix media test * port changes from processingmedia to processing emoji * finish code commenting * finish code commenting and comment-out client API + federator worker pools until concurrency worker pools replaced * linterrrrrrrrrrrrrrrr --------- Signed-off-by: kim <grufwub@gmail.com>
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)
|
|
})
|
|
}
|