@@ -21,6 +21,7 @@ import (
2121 "net/http"
2222 "sort"
2323 "strconv"
24+ "strings"
2425 "time"
2526)
2627
@@ -271,15 +272,30 @@ func (conf MiddlewareConfig) ToMiddleware() (echo.MiddlewareFunc, error) {
271272 values [0 ] = strconv .Itoa (status )
272273 values [1 ] = c .Request ().Method
273274 values [2 ] = c .Request ().Host
274- values [3 ] = url
275+ values [3 ] = strings . ToValidUTF8 ( url , " \uFFFD " ) // \uFFFD is � https://en.wikipedia.org/wiki/Specials_(Unicode_block)#Replacement_character
275276 for _ , cv := range customValuers {
276277 values [cv .index ] = cv .valueFunc (c , err )
277278 }
278-
279- requestDuration .WithLabelValues (values ... ).Observe (elapsed )
280- requestCount .WithLabelValues (values ... ).Inc ()
281- requestSize .WithLabelValues (values ... ).Observe (float64 (reqSz ))
282- responseSize .WithLabelValues (values ... ).Observe (float64 (c .Response ().Size ))
279+ if obs , err := requestDuration .GetMetricWithLabelValues (values ... ); err == nil {
280+ obs .Observe (elapsed )
281+ } else {
282+ return fmt .Errorf ("failed to label request duration metric with values, err: %w" , err )
283+ }
284+ if obs , err := requestCount .GetMetricWithLabelValues (values ... ); err == nil {
285+ obs .Inc ()
286+ } else {
287+ return fmt .Errorf ("failed to label request count metric with values, err: %w" , err )
288+ }
289+ if obs , err := requestSize .GetMetricWithLabelValues (values ... ); err == nil {
290+ obs .Observe (float64 (reqSz ))
291+ } else {
292+ return fmt .Errorf ("failed to label request size metric with values, err: %w" , err )
293+ }
294+ if obs , err := responseSize .GetMetricWithLabelValues (values ... ); err == nil {
295+ obs .Observe (float64 (c .Response ().Size ))
296+ } else {
297+ return fmt .Errorf ("failed to label response size metric with values, err: %w" , err )
298+ }
283299
284300 return err
285301 }
0 commit comments