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")), } }