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 } }