2017-11-09 18:12:04 +03:00
package api
import (
"expvar"
"fmt"
"net/http"
2017-11-20 13:04:03 +03:00
"net/http/pprof"
2017-11-09 18:12:04 +03:00
"runtime"
2019-08-03 04:58:23 +03:00
"github.com/gorilla/mux"
2017-11-09 18:12:04 +03:00
)
func init ( ) {
2022-08-31 09:24:08 +03:00
// TODO Goroutines2 -> Goroutines
2018-11-14 12:18:03 +03:00
expvar . Publish ( "Goroutines2" , expvar . Func ( goroutines ) )
2017-11-09 18:12:04 +03:00
}
func goroutines ( ) interface { } {
return runtime . NumGoroutine ( )
}
2020-05-11 13:06:07 +03:00
// DebugHandler expose debug routes.
2017-11-09 18:12:04 +03:00
type DebugHandler struct { }
2020-05-11 13:06:07 +03:00
// Append add debug routes on a router.
2018-11-14 12:18:03 +03:00
func ( g DebugHandler ) Append ( router * mux . Router ) {
2017-11-20 11:40:03 +03:00
router . Methods ( http . MethodGet ) . Path ( "/debug/vars" ) .
2017-11-09 18:12:04 +03:00
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 13:04:03 +03:00
2018-07-06 11:58:04 +03:00
runtime . SetBlockProfileRate ( 1 )
runtime . SetMutexProfileFraction ( 5 )
2017-11-20 13:04:03 +03: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 12:50:03 +03:00
router . Methods ( http . MethodGet ) . PathPrefix ( "/debug/pprof/" ) . HandlerFunc ( pprof . Index )
2017-11-09 18:12:04 +03:00
}