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)
var providers = []Provider{}
var sigs = make(chan os.Signal, 1)
defer close(sigs)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
// load global configuration
@ -91,7 +92,9 @@ func main() {
if err == nil {
currentConfiguration = configuration
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)
} else {
log.Error("Error loading new configuration, aborted ", err)
@ -135,50 +138,20 @@ func main() {
sig := <-sigs
log.Infof("I have to go... %+v", sig)
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 {
if goAway {
break
}
// middlewares
var negroni = negroni.New()
negroni.Use(metrics)
negroni.Use(loggerMiddleware)
//negroni.Use(middlewares.NewCircuitBreaker(oxyLogger))
//negroni.Use(middlewares.NewRoutes(configurationRouter))
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() {
if len(globalConfiguration.CertFile) > 0 && len(globalConfiguration.KeyFile) > 0 {
err := srv.ListenAndServeTLS(globalConfiguration.CertFile, globalConfiguration.KeyFile)
if err != nil {
netOpError, ok := err.(*net.OpError)
if ok && netOpError.Err.Error() != "use of closed network connection" {
log.Fatal("Error creating server: ", err)
}
}
} else {
err := srv.ListenAndServe()
if err != nil {
netOpError, ok := err.(*net.OpError)
if ok && netOpError.Err.Error() != "use of closed network connection" {
log.Fatal("Error creating server: ", err)
}
}
}
startServer(srv, globalConfiguration)
}()
log.Info("Started")
<-srv.StopChan()
@ -186,6 +159,49 @@ func main() {
}
}
func startServer(srv *graceful.Server, globalConfiguration *GlobalConfiguration){
if len(globalConfiguration.CertFile) > 0 && len(globalConfiguration.KeyFile) > 0 {
err := srv.ListenAndServeTLS(globalConfiguration.CertFile, globalConfiguration.KeyFile)
if err != nil {
netOpError, ok := err.(*net.OpError)
if ok && netOpError.Err.Error() != "use of closed network connection" {
log.Fatal("Error creating server: ", err)
}
}
} else {
err := srv.ListenAndServe()
if err != nil {
netOpError, ok := err.(*net.OpError)
if ok && netOpError.Err.Error() != "use of closed network connection" {
log.Fatal("Error creating server: ", err)
}
}
}
}
func stopServer(srv *graceful.Server, globalConfiguration *GlobalConfiguration){
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,
},
}
}
func LoadConfig(configuration *Configuration, globalConfiguration *GlobalConfiguration) (*mux.Router, error) {
router := mux.NewRouter()
router.NotFoundHandler = http.HandlerFunc(notFoundHandler)