diff --git a/beego.go b/beego.go index 9c5f343e..c5526887 100644 --- a/beego.go +++ b/beego.go @@ -16,6 +16,7 @@ var ( HttpPort int RecoverPanic bool AutoRender bool + PprofOn bool ViewsPath string RunMode string //"dev" or "prod" AppConfig *Config @@ -35,6 +36,7 @@ func init() { RunMode = "prod" //default runmod AutoRender = true RecoverPanic = true + PprofOn = false ViewsPath = "views" } else { HttpAddr = AppConfig.String("httpaddr") @@ -59,6 +61,11 @@ func init() { } else { RecoverPanic = ar } + if ar, err := AppConfig.Bool("pprofon"); err != nil { + PprofOn = false + } else { + PprofOn = ar + } if views := AppConfig.String("viewspath"); views == "" { ViewsPath = "views" } else { @@ -147,5 +154,9 @@ func FilterPrefixPath(path string, filter http.HandlerFunc) *App { } func Run() { + if PprofOn { + BeeApp.RegisterController(`/debug/pprof`, &ProfController{}) + BeeApp.RegisterController(`/debug/pprof/:pp([\w+])`, &ProfController{}) + } BeeApp.Run() } diff --git a/pprof.go b/pprof.go new file mode 100644 index 00000000..adc44a74 --- /dev/null +++ b/pprof.go @@ -0,0 +1,22 @@ +package beego + +import ( + "net/http/pprof" +) + +type ProfController struct { + Controller +} + +func (this *ProfController) Get() { + ptype := this.Ctx.Params[":pp"] + if ptype == "" { + pprof.Index(this.Ctx.ResponseWriter, this.Ctx.Request) + } else if ptype == "cmdline" { + pprof.Cmdline(this.Ctx.ResponseWriter, this.Ctx.Request) + } else if ptype == "profile" { + pprof.Profile(this.Ctx.ResponseWriter, this.Ctx.Request) + } else if ptype == "symbol" { + pprof.Symbol(this.Ctx.ResponseWriter, this.Ctx.Request) + } +}