27ec69eb79
* add ability to inspect version to all binaries Change-Id: I09d83b0e6ddd145dc02ae6619f842fcc7c3a0469 * add monitoring Change-Id: I14ceca4cd7706f4c33fa67f7b34ebb8297fc76ad * review comments Change-Id: I255c5559be78b92cba4b23e22cf92f459bbd16b7 * switch to atomic Change-Id: Ibdab950c59b974f64b129d783b283abe025ab0ff * linting Change-Id: Ia2407172e64c2cc92e78ad8b48c371e61ae67278
56 lines
1.5 KiB
Go
56 lines
1.5 KiB
Go
// Copyright (C) 2019 Storj Labs, Inc.
|
|
// See LICENSE for copying information.
|
|
|
|
package process
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"net"
|
|
"net/http"
|
|
"net/http/pprof"
|
|
|
|
"go.uber.org/zap"
|
|
monkit "gopkg.in/spacemonkeygo/monkit.v2"
|
|
"gopkg.in/spacemonkeygo/monkit.v2/present"
|
|
|
|
"storj.io/storj/internal/version"
|
|
)
|
|
|
|
var (
|
|
debugAddr = flag.String("debug.addr", "127.0.0.1:0", "address to listen on for debug endpoints")
|
|
)
|
|
|
|
func init() {
|
|
// zero out the http.DefaultServeMux net/http/pprof so unhelpfully
|
|
// side-effected.
|
|
*http.DefaultServeMux = http.ServeMux{}
|
|
}
|
|
|
|
func initDebug(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("/version/", http.StripPrefix("/version", http.HandlerFunc(version.DebugHandler)))
|
|
mux.Handle("/mon/", http.StripPrefix("/mon", present.HTTP(r)))
|
|
mux.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
|
|
_, _ = fmt.Fprintln(w, "OK")
|
|
})
|
|
ln, err := net.Listen("tcp", *debugAddr)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
go func() {
|
|
logger.Debug(fmt.Sprintf("debug server listening on %s", ln.Addr().String()))
|
|
err := (&http.Server{Handler: &mux}).Serve(ln)
|
|
if err != nil {
|
|
logger.Error("debug server died", zap.Error(err))
|
|
}
|
|
}()
|
|
return nil
|
|
}
|