add pprof.

This commit is contained in:
Miroslav Šedivý 2022-02-12 20:22:50 +01:00
parent d068698836
commit 89ba775a71
3 changed files with 47 additions and 0 deletions

View File

@ -12,6 +12,7 @@ type Server struct {
Key string Key string
Bind string Bind string
Static string Static string
PProf bool
CORS []string CORS []string
} }
@ -36,6 +37,11 @@ func (Server) Init(cmd *cobra.Command) error {
return err return err
} }
cmd.PersistentFlags().Bool("server.pprof", false, "enable pprof endpoint available at /debug/pprof")
if err := viper.BindPFlag("server.pprof", cmd.PersistentFlags().Lookup("server.pprof")); err != nil {
return err
}
cmd.PersistentFlags().StringSlice("server.cors", []string{"*"}, "list of allowed origins for CORS") cmd.PersistentFlags().StringSlice("server.cors", []string{"*"}, "list of allowed origins for CORS")
if err := viper.BindPFlag("server.cors", cmd.PersistentFlags().Lookup("server.cors")); err != nil { if err := viper.BindPFlag("server.cors", cmd.PersistentFlags().Lookup("server.cors")); err != nil {
return err return err
@ -49,6 +55,7 @@ func (s *Server) Set() {
s.Key = viper.GetString("server.key") s.Key = viper.GetString("server.key")
s.Bind = viper.GetString("server.bind") s.Bind = viper.GetString("server.bind")
s.Static = viper.GetString("server.static") s.Static = viper.GetString("server.static")
s.PProf = viper.GetBool("server.pprof")
s.CORS = viper.GetStringSlice("server.cors") s.CORS = viper.GetStringSlice("server.cors")
in, _ := utils.ArrayIn("*", s.CORS) in, _ := utils.ArrayIn("*", s.CORS)

36
internal/http/debug.go Normal file
View File

@ -0,0 +1,36 @@
package http
import (
"net/http"
"net/http/pprof"
"github.com/go-chi/chi"
"demodesk/neko/internal/types"
)
func pprofHandler(r types.Router) {
r.Get("/debug/pprof/", func(w http.ResponseWriter, r *http.Request) error {
pprof.Index(w, r)
return nil
})
r.Get("/debug/pprof/{action}", func(w http.ResponseWriter, r *http.Request) error {
action := chi.URLParam(r, "action")
switch action {
case "cmdline":
pprof.Cmdline(w, r)
case "profile":
pprof.Profile(w, r)
case "symbol":
pprof.Symbol(w, r)
case "trace":
pprof.Trace(w, r)
default:
pprof.Handler(action).ServeHTTP(w, r)
}
return nil
})
}

View File

@ -57,6 +57,10 @@ func New(WebSocketManager types.WebSocketManager, ApiManager types.ApiManager, c
}) })
} }
if config.PProf {
pprofHandler(router)
}
return &HttpManagerCtx{ return &HttpManagerCtx{
logger: logger, logger: logger,
config: config, config: config,