| package debug // import "github.com/docker/docker/api/server/router/debug" | |
| import ( | |
| "context" | |
| "expvar" | |
| "net/http" | |
| "net/http/pprof" | |
| "github.com/docker/docker/api/server/httputils" | |
| "github.com/docker/docker/api/server/router" | |
| ) | |
| // NewRouter creates a new debug router | |
| // The debug router holds endpoints for debug the daemon, such as those for pprof. | |
| func NewRouter() router.Router { | |
| r := &debugRouter{} | |
| r.initRoutes() | |
| return r | |
| } | |
| type debugRouter struct { | |
| routes []router.Route | |
| } | |
| func (r *debugRouter) initRoutes() { | |
| r.routes = []router.Route{ | |
| router.NewGetRoute("/vars", frameworkAdaptHandler(expvar.Handler())), | |
| router.NewGetRoute("/pprof/", frameworkAdaptHandlerFunc(pprof.Index)), | |
| router.NewGetRoute("/pprof/cmdline", frameworkAdaptHandlerFunc(pprof.Cmdline)), | |
| router.NewGetRoute("/pprof/profile", frameworkAdaptHandlerFunc(pprof.Profile)), | |
| router.NewGetRoute("/pprof/symbol", frameworkAdaptHandlerFunc(pprof.Symbol)), | |
| router.NewGetRoute("/pprof/trace", frameworkAdaptHandlerFunc(pprof.Trace)), | |
| router.NewGetRoute("/pprof/{name}", handlePprof), | |
| } | |
| } | |
| func (r *debugRouter) Routes() []router.Route { | |
| return r.routes | |
| } | |
| func frameworkAdaptHandler(handler http.Handler) httputils.APIFunc { | |
| return func(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { | |
| handler.ServeHTTP(w, r) | |
| return nil | |
| } | |
| } | |
| func frameworkAdaptHandlerFunc(handler http.HandlerFunc) httputils.APIFunc { | |
| return func(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { | |
| handler(w, r) | |
| return nil | |
| } | |
| } |