diff options
author | Mike Crute <mike@crute.us> | 2021-12-06 22:46:11 -0800 |
---|---|---|
committer | Mike Crute <mike@crute.us> | 2021-12-06 22:46:11 -0800 |
commit | 1441db8611476b0ef36481b695ce9bfa307a5d36 (patch) | |
tree | 353e88082c3b2cbc16479ef83c102e3312239c10 /echo | |
parent | cedc4f0eecb00f87d3e85bb4fba9e967f53485c1 (diff) | |
download | golib-1441db8611476b0ef36481b695ce9bfa307a5d36.tar.bz2 golib-1441db8611476b0ef36481b695ce9bfa307a5d36.tar.xz golib-1441db8611476b0ef36481b695ce9bfa307a5d36.zip |
echo: skip redirects for metricsecho/v0.5.2
Diffstat (limited to 'echo')
-rw-r--r-- | echo/echo_default.go | 45 |
1 files changed, 32 insertions, 13 deletions
diff --git a/echo/echo_default.go b/echo/echo_default.go index 569d686..a63f25f 100644 --- a/echo/echo_default.go +++ b/echo/echo_default.go | |||
@@ -34,6 +34,25 @@ const ( | |||
34 | defaultBodySizeLimit = "10M" | 34 | defaultBodySizeLimit = "10M" |
35 | ) | 35 | ) |
36 | 36 | ||
37 | func makeMiddlewareSkipper(c *prometheus.PrometheusConfig) middleware.Skipper { | ||
38 | var path string | ||
39 | |||
40 | if c != nil { | ||
41 | path = c.MetricsPath | ||
42 | } | ||
43 | |||
44 | if path == "" { | ||
45 | path = prometheus.DefaultPrometheusConfig.MetricsPath | ||
46 | } | ||
47 | |||
48 | return func(c echo.Context) bool { | ||
49 | if c.Path() == path { | ||
50 | return true | ||
51 | } | ||
52 | return false | ||
53 | } | ||
54 | } | ||
55 | |||
37 | type EchoConfig struct { | 56 | type EchoConfig struct { |
38 | Debug bool | 57 | Debug bool |
39 | Hostnames []string | 58 | Hostnames []string |
@@ -224,6 +243,8 @@ func NewDefaultEchoWithConfig(c EchoConfig) (*EchoWrapper, error) { | |||
224 | } | 243 | } |
225 | } | 244 | } |
226 | 245 | ||
246 | metricsSkipper := makeMiddlewareSkipper(c.PrometheusConfig) | ||
247 | |||
227 | e.Use(middleware.Logger()) | 248 | e.Use(middleware.Logger()) |
228 | e.Use(glmw.Recover()) | 249 | e.Use(glmw.Recover()) |
229 | 250 | ||
@@ -241,25 +262,23 @@ func NewDefaultEchoWithConfig(c EchoConfig) (*EchoWrapper, error) { | |||
241 | if err != nil { | 262 | if err != nil { |
242 | return nil, fmt.Errorf("Unable to convert TLS port to int: %w", err) | 263 | return nil, fmt.Errorf("Unable to convert TLS port to int: %w", err) |
243 | } | 264 | } |
244 | e.Use(glmw.HTTPSRedirectWithConfig(glmw.HTTPSRedirectConfig{Port: tlsPortI})) | 265 | e.Use(glmw.HTTPSRedirectWithConfig(glmw.HTTPSRedirectConfig{ |
266 | Skipper: metricsSkipper, | ||
267 | Port: tlsPortI, | ||
268 | })) | ||
245 | 269 | ||
246 | if c.RedirectToWWW { | 270 | if c.RedirectToWWW { |
247 | e.Use(middleware.WWWRedirect()) | 271 | e.Use(middleware.WWWRedirectWithConfig(middleware.RedirectConfig{ |
272 | Skipper: metricsSkipper, | ||
273 | })) | ||
248 | } | 274 | } |
249 | 275 | ||
250 | e.Use(middleware.Decompress()) | 276 | e.Use(middleware.Decompress()) |
277 | |||
278 | // TODO: This mangles responses but only for Accept: */* (browsers). Why? | ||
251 | e.Use(middleware.GzipWithConfig(middleware.GzipConfig{ | 279 | e.Use(middleware.GzipWithConfig(middleware.GzipConfig{ |
252 | // TODO: This mw causes prometheus responses to show up compressed for | 280 | Skipper: metricsSkipper, |
253 | // browsers. Why? | 281 | Level: 5, |
254 | // | ||
255 | // Also, this path should use the config path if we keep it | ||
256 | Skipper: func(c echo.Context) bool { | ||
257 | if c.Path() == "/metrics" { | ||
258 | return true | ||
259 | } | ||
260 | return false | ||
261 | }, | ||
262 | Level: 5, | ||
263 | })) | 282 | })) |
264 | 283 | ||
265 | e.Use(glmw.StrictSecure()) | 284 | e.Use(glmw.StrictSecure()) |