44 lines
1.1 KiB
Go
44 lines
1.1 KiB
Go
|
// Copyright (C) 2018 Storj Labs, Inc.
|
||
|
// See LICENSE for copying information.
|
||
|
|
||
|
package process
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"net"
|
||
|
"net/http"
|
||
|
"net/http/pprof"
|
||
|
|
||
|
"go.uber.org/zap"
|
||
|
monkit "gopkg.in/spacemonkeygo/monkit.v2"
|
||
|
"gopkg.in/spacemonkeygo/monkit.v2/present"
|
||
|
)
|
||
|
|
||
|
func init() {
|
||
|
// zero out the http.DefaultServeMux net/http/pprof so unhelpfully
|
||
|
// side-effected.
|
||
|
*http.DefaultServeMux = http.ServeMux{}
|
||
|
}
|
||
|
|
||
|
func initDebug(ctx context.Context, logger *zap.Logger, r *monkit.Registry) (
|
||
|
err error) {
|
||
|
var mux http.ServeMux
|
||
|
mux.HandleFunc("/debug/pprof/", pprof.Index)
|
||
|
mux.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
|
||
|
mux.HandleFunc("/debug/pprof/profile", pprof.Profile)
|
||
|
mux.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
|
||
|
mux.HandleFunc("/debug/pprof/trace", pprof.Trace)
|
||
|
mux.Handle("/mon/", http.StripPrefix("/mon", present.HTTP(r)))
|
||
|
ln, err := net.Listen("tcp", "localhost:0")
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
go func() {
|
||
|
err := (&http.Server{Handler: &mux}).Serve(ln)
|
||
|
if err != nil {
|
||
|
logger.Error("debug server died", zap.Error(err))
|
||
|
}
|
||
|
}()
|
||
|
return nil
|
||
|
}
|