traefik/api/debug.go

50 lines
1.3 KiB
Go
Raw Normal View History

package api
import (
"expvar"
"fmt"
"net/http"
2017-11-20 10:04:03 +00:00
"net/http/pprof"
"runtime"
"github.com/containous/mux"
)
func init() {
2018-11-14 09:18:03 +00:00
// FIXME Goroutines2 -> Goroutines
expvar.Publish("Goroutines2", expvar.Func(goroutines))
}
func goroutines() interface{} {
return runtime.NumGoroutine()
}
// DebugHandler expose debug routes
type DebugHandler struct{}
2018-11-14 09:18:03 +00:00
// Append add debug routes on a router
func (g DebugHandler) Append(router *mux.Router) {
2017-11-20 08:40:03 +00:00
router.Methods(http.MethodGet).Path("/debug/vars").
HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=utf-8")
fmt.Fprint(w, "{\n")
first := true
expvar.Do(func(kv expvar.KeyValue) {
if !first {
fmt.Fprint(w, ",\n")
}
first = false
fmt.Fprintf(w, "%q: %s", kv.Key, kv.Value)
})
fmt.Fprint(w, "\n}\n")
})
2017-11-20 10:04:03 +00:00
runtime.SetBlockProfileRate(1)
runtime.SetMutexProfileFraction(5)
2017-11-20 10:04:03 +00:00
router.Methods(http.MethodGet).PathPrefix("/debug/pprof/cmdline").HandlerFunc(pprof.Cmdline)
router.Methods(http.MethodGet).PathPrefix("/debug/pprof/profile").HandlerFunc(pprof.Profile)
router.Methods(http.MethodGet).PathPrefix("/debug/pprof/symbol").HandlerFunc(pprof.Symbol)
router.Methods(http.MethodGet).PathPrefix("/debug/pprof/trace").HandlerFunc(pprof.Trace)
2017-12-05 09:50:03 +00:00
router.Methods(http.MethodGet).PathPrefix("/debug/pprof/").HandlerFunc(pprof.Index)
}