mirror of
https://github.com/pikami/cosmium.git
synced 2025-03-13 05:15:52 +00:00
Return error code if server fails to start
This commit is contained in:
parent
da1566875b
commit
887d456ad4
@ -5,6 +5,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"sync"
|
"sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/pikami/cosmium/api/handlers"
|
"github.com/pikami/cosmium/api/handlers"
|
||||||
@ -86,7 +87,7 @@ func (s *ApiServer) CreateRouter(repository *repositories.DataRepository) {
|
|||||||
s.router = router
|
s.router = router
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *ApiServer) Start() {
|
func (s *ApiServer) Start() error {
|
||||||
listenAddress := fmt.Sprintf(":%d", s.config.Port)
|
listenAddress := fmt.Sprintf(":%d", s.config.Port)
|
||||||
s.isActive = true
|
s.isActive = true
|
||||||
|
|
||||||
@ -95,6 +96,8 @@ func (s *ApiServer) Start() {
|
|||||||
Handler: s.router.Handler(),
|
Handler: s.router.Handler(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
errChan := make(chan error, 1)
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
<-s.stopServer
|
<-s.stopServer
|
||||||
logger.InfoLn("Shutting down server...")
|
logger.InfoLn("Shutting down server...")
|
||||||
@ -106,32 +109,36 @@ func (s *ApiServer) Start() {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
|
var err error
|
||||||
if s.config.DisableTls {
|
if s.config.DisableTls {
|
||||||
logger.Infof("Listening and serving HTTP on %s\n", server.Addr)
|
logger.Infof("Listening and serving HTTP on %s\n", server.Addr)
|
||||||
err := server.ListenAndServe()
|
err = server.ListenAndServe()
|
||||||
if err != nil && err != http.ErrServerClosed {
|
|
||||||
logger.ErrorLn("Failed to start HTTP server:", err)
|
|
||||||
}
|
|
||||||
s.isActive = false
|
|
||||||
} else if s.config.TLS_CertificatePath != "" && s.config.TLS_CertificateKey != "" {
|
} else if s.config.TLS_CertificatePath != "" && s.config.TLS_CertificateKey != "" {
|
||||||
logger.Infof("Listening and serving HTTPS on %s\n", server.Addr)
|
logger.Infof("Listening and serving HTTPS on %s\n", server.Addr)
|
||||||
err := server.ListenAndServeTLS(
|
err = server.ListenAndServeTLS(
|
||||||
s.config.TLS_CertificatePath,
|
s.config.TLS_CertificatePath,
|
||||||
s.config.TLS_CertificateKey)
|
s.config.TLS_CertificateKey)
|
||||||
if err != nil && err != http.ErrServerClosed {
|
|
||||||
logger.ErrorLn("Failed to start HTTPS server:", err)
|
|
||||||
}
|
|
||||||
s.isActive = false
|
|
||||||
} else {
|
} else {
|
||||||
tlsConfig := tlsprovider.GetDefaultTlsConfig()
|
tlsConfig := tlsprovider.GetDefaultTlsConfig()
|
||||||
server.TLSConfig = tlsConfig
|
server.TLSConfig = tlsConfig
|
||||||
|
|
||||||
logger.Infof("Listening and serving HTTPS on %s\n", server.Addr)
|
logger.Infof("Listening and serving HTTPS on %s\n", server.Addr)
|
||||||
err := server.ListenAndServeTLS("", "")
|
err = server.ListenAndServeTLS("", "")
|
||||||
if err != nil && err != http.ErrServerClosed {
|
|
||||||
logger.ErrorLn("Failed to start HTTPS server:", err)
|
|
||||||
}
|
|
||||||
s.isActive = false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err != nil && err != http.ErrServerClosed {
|
||||||
|
logger.ErrorLn("Failed to start server:", err)
|
||||||
|
errChan <- err
|
||||||
|
} else {
|
||||||
|
errChan <- nil
|
||||||
|
}
|
||||||
|
s.isActive = false
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
select {
|
||||||
|
case err := <-errChan:
|
||||||
|
return err
|
||||||
|
case <-time.After(50 * time.Millisecond):
|
||||||
|
return nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,10 @@ func main() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
server := api.NewApiServer(repository, configuration)
|
server := api.NewApiServer(repository, configuration)
|
||||||
server.Start()
|
err := server.Start()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
waitForExit(server, repository, configuration)
|
waitForExit(server, repository, configuration)
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,7 @@ const (
|
|||||||
ResponseFailedToParseRequest = 103
|
ResponseFailedToParseRequest = 103
|
||||||
ResponseServerInstanceAlreadyExists = 104
|
ResponseServerInstanceAlreadyExists = 104
|
||||||
ResponseServerInstanceNotFound = 105
|
ResponseServerInstanceNotFound = 105
|
||||||
|
ResponseFailedToStartServer = 106
|
||||||
|
|
||||||
ResponseRepositoryNotFound = 200
|
ResponseRepositoryNotFound = 200
|
||||||
ResponseRepositoryConflict = 201
|
ResponseRepositoryConflict = 201
|
||||||
|
@ -37,7 +37,10 @@ func CreateServerInstance(serverName *C.char, configurationJSON *C.char) int {
|
|||||||
})
|
})
|
||||||
|
|
||||||
server := api.NewApiServer(repository, configuration)
|
server := api.NewApiServer(repository, configuration)
|
||||||
server.Start()
|
err = server.Start()
|
||||||
|
if err != nil {
|
||||||
|
return ResponseFailedToStartServer
|
||||||
|
}
|
||||||
|
|
||||||
addInstance(serverNameStr, &ServerInstance{
|
addInstance(serverNameStr, &ServerInstance{
|
||||||
server: server,
|
server: server,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user