Restructure component initialization
This commit is contained in:
parent
d8440d75f1
commit
5d3024fd3e
35
main.go
35
main.go
|
@ -237,27 +237,35 @@ func (p *prometheus) reloadConfig() bool {
|
||||||
// down. The method installs an interrupt handler, allowing to trigger a
|
// down. The method installs an interrupt handler, allowing to trigger a
|
||||||
// shutdown by sending SIGTERM to the process.
|
// shutdown by sending SIGTERM to the process.
|
||||||
func (p *prometheus) Serve() {
|
func (p *prometheus) Serve() {
|
||||||
|
// Start all components.
|
||||||
if err := p.storage.Start(); err != nil {
|
if err := p.storage.Start(); err != nil {
|
||||||
glog.Error("Error opening memory series storage: ", err)
|
glog.Error("Error opening memory series storage: ", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
defer p.storage.Stop()
|
||||||
|
|
||||||
|
// The storage has to be fully initialized before registering Prometheus.
|
||||||
|
registry.MustRegister(p)
|
||||||
|
|
||||||
for _, q := range p.remoteStorageQueues {
|
for _, q := range p.remoteStorageQueues {
|
||||||
go q.Run()
|
go q.Run()
|
||||||
|
defer q.Stop()
|
||||||
}
|
}
|
||||||
|
|
||||||
go p.ruleManager.Run()
|
go p.ruleManager.Run()
|
||||||
|
defer p.ruleManager.Stop()
|
||||||
|
|
||||||
go p.notificationHandler.Run()
|
go p.notificationHandler.Run()
|
||||||
|
defer p.notificationHandler.Stop()
|
||||||
|
|
||||||
go p.targetManager.Run()
|
go p.targetManager.Run()
|
||||||
|
defer p.targetManager.Stop()
|
||||||
|
|
||||||
registry.MustRegister(p)
|
defer p.queryEngine.Stop()
|
||||||
|
|
||||||
go func() {
|
go p.webService.ServeForever(*pathPrefix)
|
||||||
err := p.webService.ServeForever(*pathPrefix)
|
|
||||||
if err != nil {
|
|
||||||
glog.Fatal(err)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
|
// Wait for reload or termination signals.
|
||||||
hup := make(chan os.Signal)
|
hup := make(chan os.Signal)
|
||||||
signal.Notify(hup, syscall.SIGHUP)
|
signal.Notify(hup, syscall.SIGHUP)
|
||||||
go func() {
|
go func() {
|
||||||
|
@ -277,19 +285,6 @@ func (p *prometheus) Serve() {
|
||||||
|
|
||||||
close(hup)
|
close(hup)
|
||||||
|
|
||||||
p.targetManager.Stop()
|
|
||||||
p.ruleManager.Stop()
|
|
||||||
p.queryEngine.Stop()
|
|
||||||
|
|
||||||
if err := p.storage.Stop(); err != nil {
|
|
||||||
glog.Error("Error stopping local storage: ", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, q := range p.remoteStorageQueues {
|
|
||||||
q.Stop()
|
|
||||||
}
|
|
||||||
|
|
||||||
p.notificationHandler.Stop()
|
|
||||||
glog.Info("See you next time!")
|
glog.Info("See you next time!")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
13
web/web.go
13
web/web.go
|
@ -54,7 +54,7 @@ type WebService struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ServeForever serves the HTTP endpoints and only returns upon errors.
|
// ServeForever serves the HTTP endpoints and only returns upon errors.
|
||||||
func (ws WebService) ServeForever(pathPrefix string) error {
|
func (ws WebService) ServeForever(pathPrefix string) {
|
||||||
|
|
||||||
http.Handle("/favicon.ico", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
http.Handle("/favicon.ico", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
http.Error(w, "", 404)
|
http.Error(w, "", 404)
|
||||||
|
@ -104,9 +104,16 @@ func (ws WebService) ServeForever(pathPrefix string) error {
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
glog.Info("listening on ", *listenAddress)
|
glog.Infof("Listening on %s", *listenAddress)
|
||||||
|
|
||||||
return http.ListenAndServe(*listenAddress, nil)
|
// If we cannot bind to a port, retry after 30 seconds.
|
||||||
|
for {
|
||||||
|
err := http.ListenAndServe(*listenAddress, nil)
|
||||||
|
if err != nil {
|
||||||
|
glog.Errorf("Could not listen on %s: %s", *listenAddress, err)
|
||||||
|
}
|
||||||
|
time.Sleep(30 * time.Second)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ws WebService) quitHandler(w http.ResponseWriter, r *http.Request) {
|
func (ws WebService) quitHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
Loading…
Reference in New Issue