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:
Miek Gieben 2016-04-29 07:28:35 +01:00
parent a1478f891d
commit 9e9d72655d
10 changed files with 132 additions and 54 deletions

View file

@ -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
}