af732d294c
Signed-off-by: Denis Kirillov <denis@nspcc.ru>
33 lines
963 B
Go
33 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")),
|
|
}
|
|
}
|