@@ -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