// RegisterDebug adds handlers for /debug/vars (expvar) and /debug/pprof (net/http/pprof) support func (this *HttpWeb) RegisterDebug(m *martini.ClassicMartini) { m.Get("/debug/vars", func(w http.ResponseWriter, r *http.Request) { // from expvar.go, since the expvarHandler isn't exported :( w.Header().Set("Content-Type", "application/json; charset=utf-8") fmt.Fprintf(w, "{\n") first := true expvar.Do(func(kv expvar.KeyValue) { if !first { fmt.Fprintf(w, ",\n") } first = false fmt.Fprintf(w, "%q: %s", kv.Key, kv.Value) }) fmt.Fprintf(w, "\n}\n") }) // list all the /debug/ endpoints we want m.Get("/debug/pprof", pprof.Index) m.Get("/debug/pprof/cmdline", pprof.Cmdline) m.Get("/debug/pprof/profile", pprof.Profile) m.Get("/debug/pprof/symbol", pprof.Symbol) m.Post("/debug/pprof/symbol", pprof.Symbol) m.Get("/debug/pprof/block", pprof.Handler("block").ServeHTTP) m.Get("/debug/pprof/heap", pprof.Handler("heap").ServeHTTP) m.Get("/debug/pprof/goroutine", pprof.Handler("goroutine").ServeHTTP) m.Get("/debug/pprof/threadcreate", pprof.Handler("threadcreate").ServeHTTP) }