Generate Stack Traces for http response with status code zero

When we spit out a http reponse with a `0` http status code we should log a trace back so we can easily find where things went wrong. Change-Id: Ic2aadec3a3de85fbdf64da66d6d12e3c631f409d
parent bfa58763
...@@ -25,6 +25,17 @@ import ( ...@@ -25,6 +25,17 @@ import (
"k8s.io/apiserver/pkg/server/httplog" "k8s.io/apiserver/pkg/server/httplog"
) )
func badHTTPResponse() httplog.StacktracePred {
return func(status int) bool {
// http status code should not be zero
if status == 0 {
klog.Errorf("Bad HTTP Response - status is zero")
return true
}
return false
}
}
// WithPanicRecovery wraps an http Handler to recover and log panics. // WithPanicRecovery wraps an http Handler to recover and log panics.
func WithPanicRecovery(handler http.Handler) http.Handler { func WithPanicRecovery(handler http.Handler) http.Handler {
return withPanicRecovery(handler, func(w http.ResponseWriter, req *http.Request, err interface{}) { return withPanicRecovery(handler, func(w http.ResponseWriter, req *http.Request, err interface{}) {
...@@ -39,7 +50,7 @@ func withPanicRecovery(handler http.Handler, crashHandler func(http.ResponseWrit ...@@ -39,7 +50,7 @@ func withPanicRecovery(handler http.Handler, crashHandler func(http.ResponseWrit
crashHandler(w, req, err) crashHandler(w, req, err)
}) })
logger := httplog.NewLogged(req, &w) logger := httplog.NewLogged(req, &w).StacktraceWhen(badHTTPResponse())
defer logger.Log() defer logger.Log()
// Dispatch to the internal handler // Dispatch to the internal handler
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment