package home

import (
	"net/http"
	"net/http/pprof"
	"runtime"

	"github.com/AdguardTeam/golibs/log"
)

// startPprof launches the debug and profiling server on addr.
func startPprof(addr string) {
	runtime.SetBlockProfileRate(1)
	runtime.SetMutexProfileFraction(1)

	mux := http.NewServeMux()

	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)

	// See profileSupportsDelta in src/net/http/pprof/pprof.go.
	mux.Handle("/debug/pprof/allocs", pprof.Handler("allocs"))
	mux.Handle("/debug/pprof/block", pprof.Handler("block"))
	mux.Handle("/debug/pprof/goroutine", pprof.Handler("goroutine"))
	mux.Handle("/debug/pprof/heap", pprof.Handler("heap"))
	mux.Handle("/debug/pprof/mutex", pprof.Handler("mutex"))
	mux.Handle("/debug/pprof/threadcreate", pprof.Handler("threadcreate"))

	go func() {
		defer log.OnPanic("pprof server")

		log.Info("pprof: listening on %q", addr)
		err := http.ListenAndServe(addr, mux)
		log.Info("pprof server errors: %v", err)
	}()
}