// WrapHandler wraps an httpctx.Handler in the paraphernalia needed by devd for // logging, latency, and so forth. func (dd *Devd) WrapHandler(log termlog.Logger, next httpctx.Handler) http.Handler { h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { revertOriginalHost(r) timr := timer.Timer{} sublog := log.Group() defer func() { timing := termlog.DefaultPalette.Timestamp.SprintFunc()("timing: ") sublog.SayAs("timer", timing+timr.String()) sublog.Done() }() if matchStringAny(dd.IgnoreLogs, fmt.Sprintf("%s%s", r.URL.Host, r.RequestURI)) { sublog.Quiet() } timr.RequestHeaders() time.Sleep(time.Millisecond * time.Duration(dd.Latency)) sublog.Say("%s %s", r.Method, r.URL) LogHeader(sublog, r.Header) ctx := timr.NewContext(context.Background()) ctx = termlog.NewContext(ctx, sublog) next.ServeHTTPContext( ctx, &ResponseLogWriter{Log: sublog, Resp: w, Timer: &timr}, r, ) }) return h }
// WrapHandler wraps an httpctx.Handler in the paraphernalia needed by devd for // logging, latency, and so forth. func (dd *Devd) WrapHandler(log termlog.TermLog, next httpctx.Handler) http.Handler { h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { revertOriginalHost(r) timr := timer.Timer{} sublog := log.Group() defer func() { timing := termlog.DefaultPalette.Timestamp.SprintFunc()("timing: ") sublog.SayAs("timer", timing+timr.String()) sublog.Done() }() if matchStringAny(dd.IgnoreLogs, fmt.Sprintf("%s%s", r.URL.Host, r.RequestURI)) { sublog.Quiet() } timr.RequestHeaders() time.Sleep(time.Millisecond * time.Duration(dd.Latency)) dpath := r.URL.String() if !strings.HasPrefix(dpath, "/") { dpath = "/" + dpath } sublog.Say("%s %s", r.Method, dpath) LogHeader(sublog, r.Header) ctx := timr.NewContext(context.Background()) ctx = termlog.NewContext(ctx, sublog) if dd.AddHeaders != nil { for h, vals := range *dd.AddHeaders { if strings.ToLower(h) == "host" { if len(vals) > 0 { r.Host = vals[0] } } else { for _, v := range vals { w.Header().Set(h, v) } } } } next.ServeHTTPContext( ctx, &ResponseLogWriter{Log: sublog, Resp: w, Timer: &timr}, r, ) }) return h }