github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/services/metrics/pprof.go (about)

     1  package metrics
     2  
     3  import (
     4  	"net/http"
     5  	"net/http/pprof"
     6  
     7  	"github.com/nspcc-dev/neo-go/pkg/config"
     8  	"go.uber.org/zap"
     9  )
    10  
    11  // PprofService https://golang.org/pkg/net/http/pprof/.
    12  type PprofService Service
    13  
    14  // NewPprofService creates a new service for gathering pprof metrics.
    15  func NewPprofService(cfg config.BasicService, log *zap.Logger) *Service {
    16  	if log == nil {
    17  		return nil
    18  	}
    19  
    20  	handler := http.NewServeMux()
    21  	handler.HandleFunc("/debug/pprof/", pprof.Index)
    22  	handler.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
    23  	handler.HandleFunc("/debug/pprof/profile", pprof.Profile)
    24  	handler.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
    25  	handler.HandleFunc("/debug/pprof/trace", pprof.Trace)
    26  
    27  	addrs := cfg.Addresses
    28  	srvs := make([]*http.Server, len(addrs))
    29  	for i, addr := range addrs {
    30  		srvs[i] = &http.Server{
    31  			Addr:    addr,
    32  			Handler: handler,
    33  		}
    34  	}
    35  	return NewService("Pprof", srvs, cfg, log)
    36  }