Make middleware survive a restart (#142)
Make middleware that sets up a (http) handler survive a graceful restart. We calls the middleware's Shutdown function(s). If restart fails the Start function is called again. * middleware/health: OK * middleware/pprof: OK * middleware/metrics: OK All restart OK.
This commit is contained in:
parent
a1478f891d
commit
9e9d72655d
10 changed files with 132 additions and 54 deletions
|
@ -12,18 +12,19 @@ const addr = "localhost:9153"
|
|||
var metricsOnce sync.Once
|
||||
|
||||
func Prometheus(c *Controller) (middleware.Middleware, error) {
|
||||
met, err := parsePrometheus(c)
|
||||
m, err := parsePrometheus(c)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
metricsOnce.Do(func() {
|
||||
c.Startup = append(c.Startup, met.Start)
|
||||
c.Startup = append(c.Startup, m.Start)
|
||||
c.Shutdown = append(c.Shutdown, m.Shutdown)
|
||||
})
|
||||
|
||||
return func(next middleware.Handler) middleware.Handler {
|
||||
met.Next = next
|
||||
return met
|
||||
m.Next = next
|
||||
return m
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue