feat: add panic recovery middleware (#3687)

This commit is contained in:
Jon Ayers
2022-08-29 17:00:52 -05:00
committed by GitHub
parent 3cf17d34e7
commit 053fe6ff61
13 changed files with 471 additions and 40 deletions

View File

@ -4,11 +4,12 @@ import (
"fmt"
"net/http"
"github.com/go-chi/chi/middleware"
"github.com/go-chi/chi/v5"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.10.0"
"go.opentelemetry.io/otel/trace"
"github.com/coder/coder/coderd/httpapi"
)
// HTTPMW adds tracing to http routes.
@ -25,13 +26,15 @@ func HTTPMW(tracerProvider *sdktrace.TracerProvider, name string) func(http.Hand
defer span.End()
r = r.WithContext(ctx)
wrw := middleware.NewWrapResponseWriter(rw, r.ProtoMajor)
sw, ok := rw.(*httpapi.StatusWriter)
if !ok {
panic(fmt.Sprintf("ResponseWriter not a *httpapi.StatusWriter; got %T", rw))
}
// pass the span through the request context and serve the request to the next middleware
next.ServeHTTP(wrw, r)
next.ServeHTTP(sw, r)
// capture response data
EndHTTPSpan(r, wrw.Status())
EndHTTPSpan(r, sw.Status)
})
}
}