Skip to content

Commit b997057

Browse files
authored
Merge pull request #7 from ethpandaops/fix/error-response-status
fix(api): correct error response status codes
2 parents 68390fd + 4bb8c88 commit b997057

1 file changed

Lines changed: 16 additions & 7 deletions

File tree

pkg/api/handler.go

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,12 @@ func (h *Handler) wrappedHandler(handler func(ctx context.Context, r *http.Reque
7070

7171
h.metrics.ObserveRequest(r.Method, registeredPath, executionMethod)
7272

73-
response := &HTTPResponse{}
73+
responseStatusCode := http.StatusInternalServerError
7474

7575
var err error
7676

7777
defer func() {
78-
h.metrics.ObserveResponse(r.Method, registeredPath, fmt.Sprintf("%v", response.StatusCode), contentType.String(), executionMethod, time.Since(start))
78+
h.metrics.ObserveResponse(r.Method, registeredPath, fmt.Sprintf("%v", responseStatusCode), contentType.String(), executionMethod, time.Since(start))
7979
}()
8080

8181
decoder := json.NewDecoder(r.Body)
@@ -84,15 +84,17 @@ func (h *Handler) wrappedHandler(handler func(ctx context.Context, r *http.Reque
8484

8585
err = decoder.Decode(&body)
8686
if err != nil {
87-
if writeErr := WriteErrorResponse(w, err.Error(), response.StatusCode); writeErr != nil {
87+
responseStatusCode = http.StatusBadRequest
88+
if writeErr := WriteErrorResponse(w, err.Error(), responseStatusCode); writeErr != nil {
8889
h.log.WithError(writeErr).Error("Failed to decode request body")
8990
}
9091

9192
return
9293
}
9394

9495
if body.Method == "" {
95-
if writeErr := WriteErrorResponse(w, "Missing method", http.StatusBadRequest); writeErr != nil {
96+
responseStatusCode = http.StatusBadRequest
97+
if writeErr := WriteErrorResponse(w, "Missing method", responseStatusCode); writeErr != nil {
9698
h.log.WithError(writeErr).Error("Request body missing method")
9799
}
98100

@@ -101,18 +103,25 @@ func (h *Handler) wrappedHandler(handler func(ctx context.Context, r *http.Reque
101103

102104
executionMethod = body.Method
103105

104-
response, err = handler(ctx, r, p, contentType, &body)
106+
response, err := handler(ctx, r, p, contentType, &body)
105107
if err != nil {
106-
if writeErr := WriteErrorResponse(w, err.Error(), response.StatusCode); writeErr != nil {
108+
if response != nil && response.StatusCode != 0 {
109+
responseStatusCode = response.StatusCode
110+
}
111+
112+
if writeErr := WriteErrorResponse(w, err.Error(), responseStatusCode); writeErr != nil {
107113
h.log.WithError(writeErr).Error("Failed to write error response")
108114
}
109115

110116
return
111117
}
112118

119+
responseStatusCode = response.StatusCode
120+
113121
data, err := response.MarshalAs(contentType)
114122
if err != nil {
115-
if writeErr := WriteErrorResponse(w, err.Error(), http.StatusInternalServerError); writeErr != nil {
123+
responseStatusCode = http.StatusInternalServerError
124+
if writeErr := WriteErrorResponse(w, err.Error(), responseStatusCode); writeErr != nil {
116125
h.log.WithError(writeErr).Error("Failed to write error response")
117126
}
118127

0 commit comments

Comments
 (0)