refactoring server

This commit is contained in:
emile 2015-09-25 22:02:55 +02:00
parent ce1d14d779
commit 9edd4874ac

View file

@ -47,6 +47,7 @@ func main() {
defer close(configurationChan) defer close(configurationChan)
var providers = []Provider{} var providers = []Provider{}
var sigs = make(chan os.Signal, 1) var sigs = make(chan os.Signal, 1)
defer close(sigs)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
// load global configuration // load global configuration
@ -91,7 +92,9 @@ func main() {
if err == nil { if err == nil {
currentConfiguration = configuration currentConfiguration = configuration
configurationRouter = newConfigurationRouter configurationRouter = newConfigurationRouter
srv.Stop(time.Duration(globalConfiguration.GraceTimeOut) * time.Second) oldServer := srv
srv = prepareServer(configurationRouter, globalConfiguration, loggerMiddleware, metrics)
stopServer(oldServer, globalConfiguration)
time.Sleep(3 * time.Second) time.Sleep(3 * time.Second)
} else { } else {
log.Error("Error loading new configuration, aborted ", err) log.Error("Error loading new configuration, aborted ", err)
@ -135,33 +138,28 @@ func main() {
sig := <-sigs sig := <-sigs
log.Infof("I have to go... %+v", sig) log.Infof("I have to go... %+v", sig)
goAway = true goAway = true
srv.Stop(time.Duration(globalConfiguration.GraceTimeOut) * time.Second) stopServer(srv, globalConfiguration)
}() }()
//negroni.Use(middlewares.NewCircuitBreaker(oxyLogger))
//negroni.Use(middlewares.NewRoutes(configurationRouter))
srv = prepareServer(configurationRouter, globalConfiguration, loggerMiddleware, metrics)
for { for {
if goAway { if goAway {
break break
} }
// middlewares go func() {
var negroni = negroni.New() startServer(srv, globalConfiguration)
negroni.Use(metrics) }()
negroni.Use(loggerMiddleware) log.Info("Started")
//negroni.Use(middlewares.NewCircuitBreaker(oxyLogger)) <-srv.StopChan()
//negroni.Use(middlewares.NewRoutes(configurationRouter)) log.Info("Stopped")
negroni.UseHandler(configurationRouter) }
srv = &graceful.Server{
Timeout: time.Duration(globalConfiguration.GraceTimeOut) * time.Second,
NoSignalHandling: true,
Server: &http.Server{
Addr: globalConfiguration.Port,
Handler: negroni,
},
} }
go func() { func startServer(srv *graceful.Server, globalConfiguration *GlobalConfiguration){
if len(globalConfiguration.CertFile) > 0 && len(globalConfiguration.KeyFile) > 0 { if len(globalConfiguration.CertFile) > 0 && len(globalConfiguration.KeyFile) > 0 {
err := srv.ListenAndServeTLS(globalConfiguration.CertFile, globalConfiguration.KeyFile) err := srv.ListenAndServeTLS(globalConfiguration.CertFile, globalConfiguration.KeyFile)
if err != nil { if err != nil {
@ -179,10 +177,28 @@ func main() {
} }
} }
} }
}() }
log.Info("Started")
<-srv.StopChan() func stopServer(srv *graceful.Server, globalConfiguration *GlobalConfiguration){
log.Info("Stopped") srv.Stop(time.Duration(globalConfiguration.GraceTimeOut) * time.Second)
}
func prepareServer(router *mux.Router, globalConfiguration *GlobalConfiguration, middlewares...negroni.Handler) (*graceful.Server){
// middlewares
var negroni = negroni.New()
for _, middleware := range middlewares {
negroni.Use(middleware)
}
negroni.UseHandler(router)
return &graceful.Server{
Timeout: time.Duration(globalConfiguration.GraceTimeOut) * time.Second,
NoSignalHandling: true,
Server: &http.Server{
Addr: globalConfiguration.Port,
Handler: negroni,
},
} }
} }