Files
2023-11-18 18:58:02 +00:00

48 lines
1.2 KiB
Go

package httpserver
import (
"github.com/gin-gonic/gin"
pyroscope "github.com/grafana/pyroscope-go/godeltaprof/http/pprof"
"net/http/pprof"
"runtime"
)
type pprofBuilder struct{}
func (pprofBuilder) Key() string {
return "pprof"
}
func (b pprofBuilder) Apply(e *gin.Engine) error {
runtime.SetMutexProfileFraction(5)
runtime.SetBlockProfileRate(5)
e.Any("/debug/pprof/", func(c *gin.Context) {
pprof.Index(c.Writer, c.Request)
})
e.Any("/debug/pprof/cmdline", func(c *gin.Context) {
pprof.Cmdline(c.Writer, c.Request)
})
e.Any("/debug/pprof/profile", func(c *gin.Context) {
pprof.Profile(c.Writer, c.Request)
})
e.Any("/debug/pprof/symbol", func(c *gin.Context) {
pprof.Symbol(c.Writer, c.Request)
})
e.Any("/debug/pprof/trace", func(c *gin.Context) {
pprof.Trace(c.Writer, c.Request)
})
e.Any("/debug/pprof/delta_heap", func(c *gin.Context) {
pyroscope.Heap(c.Writer, c.Request)
})
e.Any("/debug/pprof/delta_block", func(c *gin.Context) {
pyroscope.Block(c.Writer, c.Request)
})
e.Any("/debug/pprof/delta_mutex", func(c *gin.Context) {
pyroscope.Mutex(c.Writer, c.Request)
})
e.Any("/debug/pprof/:profile", func(c *gin.Context) {
pprof.Handler(c.Param("profile")).ServeHTTP(c.Writer, c.Request)
})
return nil
}