Merge pull request #22261 from zexi/automated-cherry-pick-of-#22259-upstream-release-3.11

Automated cherry pick of #22259: fix(webconsole,monitor): pprof handlers of gorilla mux
This commit is contained in:
Zexi Li
2025-03-11 12:27:43 +08:00
committed by GitHub
3 changed files with 27 additions and 34 deletions
+25
View File
@@ -20,6 +20,8 @@ import (
"net/http"
"net/http/pprof"
"github.com/gorilla/mux"
"yunion.io/x/pkg/util/version"
)
@@ -85,3 +87,26 @@ func profSymbol(_ context.Context, w http.ResponseWriter, r *http.Request) {
func profTrace(_ context.Context, w http.ResponseWriter, r *http.Request) {
pprof.Trace(w, r)
}
func AddMiscHandlersToMuxRouter(app *Application, root *mux.Router, enableProfiling bool) {
adapterF := func(appHandleFunc func(ctx context.Context, w http.ResponseWriter, r *http.Request)) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
appHandleFunc(app.GetContext(), w, r)
}
}
root.HandleFunc("/version", adapterF(VersionHandler))
root.HandleFunc("/stats", adapterF(StatisticHandler))
root.HandleFunc("/ping", adapterF(PingHandler))
root.HandleFunc("/worker_stats", adapterF(WorkerStatsHandler))
if enableProfiling {
pp := "/debug/pprof"
ppPath := func(sufix string) string {
return fmt.Sprintf("%s/%s", pp, sufix)
}
root.HandleFunc(ppPath(""), pprof.Index)
root.HandleFunc(ppPath("cmdline"), pprof.Cmdline)
root.HandleFunc(ppPath("profile"), pprof.Profile)
root.HandleFunc(ppPath("symbol"), pprof.Symbol)
root.HandleFunc(ppPath("trace"), pprof.Trace)
}
}
+1 -12
View File
@@ -18,7 +18,6 @@ import (
"context"
"net"
"net/http"
_ "net/http/pprof"
"strconv"
"github.com/gorilla/mux"
@@ -127,15 +126,5 @@ func addMiscHandlers(app *appsrv.Application, root *mux.Router) {
}
}
root.HandleFunc("/subscriptions/write", adapterF(performHandler))
// ref: pkg/appsrv/appsrv:addDefaultHandlers
root.HandleFunc("/version", adapterF(appsrv.VersionHandler))
root.HandleFunc("/stats", adapterF(appsrv.StatisticHandler))
root.HandleFunc("/ping", adapterF(appsrv.PingHandler))
root.HandleFunc("/worker_stats", adapterF(appsrv.WorkerStatsHandler))
// pprof handler
if options.Options.EnableAppProfiling {
root.PathPrefix("/debug/pprof/").Handler(http.DefaultServeMux)
}
appsrv.AddMiscHandlersToMuxRouter(app, root, options.Options.EnableAppProfiling)
}
+1 -22
View File
@@ -15,10 +15,8 @@
package service
import (
"context"
"net"
"net/http"
_ "net/http/pprof"
"net/url"
"os"
"strconv"
@@ -100,7 +98,7 @@ func start() {
root.Handle(WebsocketProxyPathPrefix, srv)
// misc handler
addMiscHandlers(app, root)
appsrv.AddMiscHandlersToMuxRouter(app, root, o.Options.EnableAppProfiling)
cron := cronman.InitCronJobManager(true, o.Options.CronJobWorkerCount, o.Options.TimeZone)
@@ -126,22 +124,3 @@ func start() {
}
}
}
func addMiscHandlers(app *appsrv.Application, root *mux.Router) {
adapterF := func(appHandleFunc func(ctx context.Context, w http.ResponseWriter, r *http.Request)) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
appHandleFunc(app.GetContext(), w, r)
}
}
// ref: pkg/appsrv/appsrv:addDefaultHandlers
root.HandleFunc("/version", adapterF(appsrv.VersionHandler))
root.HandleFunc("/stats", adapterF(appsrv.StatisticHandler))
root.HandleFunc("/ping", adapterF(appsrv.PingHandler))
root.HandleFunc("/worker_stats", adapterF(appsrv.WorkerStatsHandler))
// pprof handler
if o.Options.EnableAppProfiling {
root.PathPrefix("/debug/pprof/").Handler(http.DefaultServeMux)
}
}