From b0eeb8b0aaaf4997c25e3048bfc40e53d556a8eb Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Sun, 3 Apr 2016 12:52:12 -0400 Subject: [PATCH] net/http/pprof: accept fractional seconds in trace handler For heavily loaded servers, even 1 second of trace is too large to process with the trace viewer; using a float64 here allows fetching /debug/pprof/trace?seconds=0.1. Change-Id: I286c07abf04f9c1fe594b0e26799bf37f5c734db Reviewed-on: https://go-review.googlesource.com/21455 Reviewed-by: Austin Clements --- src/net/http/pprof/pprof.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/net/http/pprof/pprof.go b/src/net/http/pprof/pprof.go index 44afa2d8d8..cb4086b963 100644 --- a/src/net/http/pprof/pprof.go +++ b/src/net/http/pprof/pprof.go @@ -120,8 +120,8 @@ func Profile(w http.ResponseWriter, r *http.Request) { // Tracing lasts for duration specified in seconds GET parameter, or for 1 second if not specified. // The package initialization registers it as /debug/pprof/trace. func Trace(w http.ResponseWriter, r *http.Request) { - sec, _ := strconv.ParseInt(r.FormValue("seconds"), 10, 64) - if sec == 0 { + sec, err := strconv.ParseFloat(r.FormValue("seconds"), 64) + if sec <= 0 || err != nil { sec = 1 } @@ -136,7 +136,7 @@ func Trace(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Could not enable tracing: %s\n", err) return } - sleep(w, time.Duration(sec)*time.Second) + sleep(w, time.Duration(sec*float64(time.Second))) trace.Stop() }