tsweb: fold StdHandlerOpts and StdHandler200s with StdHandler.

Signed-off-by: David Anderson <danderson@tailscale.com>
This commit is contained in:
David Anderson 2021-06-15 21:48:47 -07:00
parent 72343fbbec
commit 48c25fa36f
3 changed files with 12 additions and 24 deletions

View File

@ -57,7 +57,10 @@ func main() {
mux := tsweb.NewMux(http.HandlerFunc(debugHandler)) mux := tsweb.NewMux(http.HandlerFunc(debugHandler))
mux.Handle("/metrics", tsweb.Protected(proxy)) mux.Handle("/metrics", tsweb.Protected(proxy))
mux.Handle("/varz", tsweb.Protected(tsweb.StdHandler(&goVarsHandler{*goVarsURL}, log.Printf))) mux.Handle("/varz", tsweb.Protected(tsweb.StdHandler(&goVarsHandler{*goVarsURL}, tsweb.HandlerOptions{
Quiet200s: true,
Logf: log.Printf,
})))
ch := &certHolder{ ch := &certHolder{
hostname: *hostname, hostname: *hostname,

View File

@ -186,13 +186,6 @@ type HandlerOptions struct {
StatusCodeCounters *expvar.Map StatusCodeCounters *expvar.Map
} }
// StdHandler converts a ReturnHandler into a standard http.Handler.
// Handled requests are logged using logf, as are any errors. Errors
// are handled as specified by the Handler interface.
func StdHandler(h ReturnHandler, logf logger.Logf) http.Handler {
return StdHandlerOpts(h, HandlerOptions{Logf: logf, Now: time.Now})
}
// ReturnHandlerFunc is an adapter to allow the use of ordinary // ReturnHandlerFunc is an adapter to allow the use of ordinary
// functions as ReturnHandlers. If f is a function with the // functions as ReturnHandlers. If f is a function with the
// appropriate signature, ReturnHandlerFunc(f) is a ReturnHandler that // appropriate signature, ReturnHandlerFunc(f) is a ReturnHandler that
@ -204,22 +197,16 @@ func (f ReturnHandlerFunc) ServeHTTPReturn(w http.ResponseWriter, r *http.Reques
return f(w, r) return f(w, r)
} }
// StdHandlerNo200s is like StdHandler, but successfully handled HTTP // StdHandler converts a ReturnHandler into a standard http.Handler.
// requests don't write an access log entry to logf.
//
// TODO(josharian): eliminate this and StdHandler in favor of StdHandlerOpts,
// rename StdHandlerOpts to StdHandler. Will be a breaking API change.
func StdHandlerNo200s(h ReturnHandler, logf logger.Logf) http.Handler {
return StdHandlerOpts(h, HandlerOptions{Logf: logf, Now: time.Now, Quiet200s: true})
}
// StdHandlerOpts converts a ReturnHandler into a standard http.Handler.
// Handled requests are logged using opts.Logf, as are any errors. // Handled requests are logged using opts.Logf, as are any errors.
// Errors are handled as specified by the Handler interface. // Errors are handled as specified by the Handler interface.
func StdHandlerOpts(h ReturnHandler, opts HandlerOptions) http.Handler { func StdHandler(h ReturnHandler, opts HandlerOptions) http.Handler {
if opts.Now == nil { if opts.Now == nil {
opts.Now = time.Now opts.Now = time.Now
} }
if opts.Logf == nil {
opts.Logf = logger.Discard
}
return retHandler{h, opts} return retHandler{h, opts}
} }

View File

@ -248,7 +248,7 @@ func TestStdHandler(t *testing.T) {
clock.Reset() clock.Reset()
rec := noopHijacker{httptest.NewRecorder(), false} rec := noopHijacker{httptest.NewRecorder(), false}
h := StdHandlerOpts(test.rh, HandlerOptions{Logf: logf, Now: clock.Now}) h := StdHandler(test.rh, HandlerOptions{Logf: logf, Now: clock.Now})
h.ServeHTTP(&rec, test.r) h.ServeHTTP(&rec, test.r)
res := rec.Result() res := rec.Result()
if res.StatusCode != test.wantCode { if res.StatusCode != test.wantCode {
@ -277,8 +277,7 @@ func BenchmarkLogNot200(b *testing.B) {
// Implicit 200 OK. // Implicit 200 OK.
return nil return nil
}) })
discardLogger := func(string, ...interface{}) {} h := StdHandler(rh, HandlerOptions{Quiet200s: true})
h := StdHandlerNo200s(rh, discardLogger)
req := httptest.NewRequest("GET", "/", nil) req := httptest.NewRequest("GET", "/", nil)
rw := new(httptest.ResponseRecorder) rw := new(httptest.ResponseRecorder)
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
@ -293,8 +292,7 @@ func BenchmarkLog(b *testing.B) {
// Implicit 200 OK. // Implicit 200 OK.
return nil return nil
}) })
discardLogger := func(string, ...interface{}) {} h := StdHandler(rh, HandlerOptions{})
h := StdHandler(rh, discardLogger)
req := httptest.NewRequest("GET", "/", nil) req := httptest.NewRequest("GET", "/", nil)
rw := new(httptest.ResponseRecorder) rw := new(httptest.ResponseRecorder)
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {