func (this *Proxy) DoProxy(request *http.Request, reply *web.Reply, chain web.FilterChain) { request.URL.Scheme = this.scheme request.URL.Host = this.host request.Host = this.host request.RequestURI = "" resp, err := this.client.Do(request) if err != nil { reply.SetCode(500) reply.With(fmt.Sprintf("代理错误:%s", err)) return } reply.SetCode(resp.StatusCode) for k, v := range resp.Header { reply.SetHeader(k, v[0]) } reply.With(resp.Body) }
func (name handler) RequestHandler(request *http.Request, pathFragments map[string]string, reply *web.Reply) { reply.SetContentType("text/plain; charset=utf-8") debug, _ := strconv.Atoi(request.FormValue("debug")) p := pprof.Lookup(string(name)) if p == nil { reply.SetCode(404).With(fmt.Sprintf("Unknown profile: %s\n", name)) return } gc, _ := strconv.Atoi(request.FormValue("gc")) if name == "heap" && gc > 0 { runtime.GC() } r, w := io.Pipe() go func() { defer w.Close() p.WriteTo(w, debug) }() reply.With(r) }
func Profile(request *http.Request, pathFragments map[string]string, reply *web.Reply) { sec, _ := strconv.ParseInt(request.FormValue("seconds"), 10, 64) if sec == 0 { sec = 30 } reply.SetContentType("application/octet-stream") r, w := io.Pipe() if err := pprof.StartCPUProfile(w); err != nil { reply.SetContentType("text/plain; charset=utf-8") reply.SetCode(http.StatusInternalServerError) reply.With(fmt.Sprintf("Could not enable CPU profiling: %s\n", err)) return } go func() { time.Sleep(time.Duration(sec) * time.Second) pprof.StopCPUProfile() w.Close() }() reply.With(r) }