dotcloud/docker

View on GitHub
api/server/router/debug/debug.go

Summary

Maintainability
A
0 mins
Test Coverage
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
    }
}