@@ -21,6 +21,7 @@ import (
21
21
"net/http"
22
22
"sort"
23
23
"strconv"
24
+ "strings"
24
25
"time"
25
26
)
26
27
@@ -271,15 +272,30 @@ func (conf MiddlewareConfig) ToMiddleware() (echo.MiddlewareFunc, error) {
271
272
values [0 ] = strconv .Itoa (status )
272
273
values [1 ] = c .Request ().Method
273
274
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
275
276
for _ , cv := range customValuers {
276
277
values [cv .index ] = cv .valueFunc (c , err )
277
278
}
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
+ }
283
299
284
300
return err
285
301
}
0 commit comments