forked from TrueCloudLab/frostfs-rest-gw
34 lines
963 B
Go
34 lines
963 B
Go
|
package metrics
|
||
|
|
||
|
import (
|
||
|
"net/http"
|
||
|
"net/http/pprof"
|
||
|
|
||
|
"go.uber.org/zap"
|
||
|
)
|
||
|
|
||
|
// NewPprofService creates a new service for gathering pprof metrics.
|
||
|
func NewPprofService(l *zap.Logger, cfg Config) *Service {
|
||
|
handler := http.NewServeMux()
|
||
|
handler.HandleFunc("/debug/pprof/", pprof.Index)
|
||
|
handler.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
|
||
|
handler.HandleFunc("/debug/pprof/profile", pprof.Profile)
|
||
|
handler.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
|
||
|
handler.HandleFunc("/debug/pprof/trace", pprof.Trace)
|
||
|
|
||
|
// Manually add support for paths linked to by index page at /debug/pprof/
|
||
|
for _, item := range []string{"allocs", "block", "heap", "goroutine", "mutex", "threadcreate"} {
|
||
|
handler.Handle("/debug/pprof/"+item, pprof.Handler(item))
|
||
|
}
|
||
|
|
||
|
return &Service{
|
||
|
Server: &http.Server{
|
||
|
Addr: cfg.Address,
|
||
|
Handler: handler,
|
||
|
},
|
||
|
enabled: cfg.Enabled,
|
||
|
serviceType: "Pprof",
|
||
|
log: l.With(zap.String("service", "Pprof")),
|
||
|
}
|
||
|
}
|