aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Crute <mike@crute.us>2021-12-06 22:46:11 -0800
committerMike Crute <mike@crute.us>2021-12-06 22:46:11 -0800
commit1441db8611476b0ef36481b695ce9bfa307a5d36 (patch)
tree353e88082c3b2cbc16479ef83c102e3312239c10
parentcedc4f0eecb00f87d3e85bb4fba9e967f53485c1 (diff)
downloadgolib-1441db8611476b0ef36481b695ce9bfa307a5d36.tar.bz2
golib-1441db8611476b0ef36481b695ce9bfa307a5d36.tar.xz
golib-1441db8611476b0ef36481b695ce9bfa307a5d36.zip
echo: skip redirects for metricsecho/v0.5.2
-rw-r--r--echo/echo_default.go45
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
37func 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
37type EchoConfig struct { 56type 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())