diff --git a/probe/probe.go b/probe/probe.go index 106bc1e16..b34f21cde 100644 --- a/probe/probe.go +++ b/probe/probe.go @@ -110,9 +110,10 @@ func (p *Probe) Start() { } // Stop stops the probe -func (p *Probe) Stop() { +func (p *Probe) Stop() error { close(p.quit) p.done.Wait() + return nil } // Publish will queue a report for immediate publication, diff --git a/prog/app.go b/prog/app.go index a01e3c6e6..556bcb41e 100644 --- a/prog/app.go +++ b/prog/app.go @@ -19,6 +19,7 @@ import ( billing "github.com/weaveworks/billing-client" "github.com/weaveworks/common/aws" + "github.com/weaveworks/common/logging" "github.com/weaveworks/common/middleware" "github.com/weaveworks/common/network" "github.com/weaveworks/common/signals" @@ -307,10 +308,27 @@ func appMain(flags appFlags) { }() // block until INT/TERM - signals.SignalHandlerLoop() + signals.SignalHandlerLoop( + logging.Logrus(log.StandardLogger()), + stopper{ + Server: server, + StopTimeout: flags.stopTimeout, + }, + ) +} + +// stopper adapts graceful.Server's interface to signals.SignalReceiver's interface. +type stopper struct { + Server *graceful.Server + StopTimeout time.Duration +} + +// Stop implements signals.SignalReceiver's Stop method. +func (c stopper) Stop() error { // stop listening, wait for any active connections to finish - server.Stop(flags.stopTimeout) - <-server.StopChan() + c.Server.Stop(c.StopTimeout) + <-c.Server.StopChan() + return nil } func newWeavePublisher(dockerEndpoint, weaveAddr, weaveHostname, containerName string) (*app.WeavePublisher, error) { diff --git a/prog/probe.go b/prog/probe.go index 0c06ba952..fb989f760 100644 --- a/prog/probe.go +++ b/prog/probe.go @@ -14,6 +14,7 @@ import ( "github.com/prometheus/client_golang/prometheus" log "github.com/sirupsen/logrus" + "github.com/weaveworks/common/logging" "github.com/weaveworks/common/network" "github.com/weaveworks/common/sanitize" "github.com/weaveworks/common/signals" @@ -304,7 +305,8 @@ func probeMain(flags probeFlags, targets []appclient.Target) { maybeExportProfileData(flags) p.Start() - defer p.Stop() - - signals.SignalHandlerLoop() + signals.SignalHandlerLoop( + logging.Logrus(log.StandardLogger()), + p, + ) }