Return error code if server fails to start

This commit is contained in:
Pijus Kamandulis 2025-02-03 22:58:45 +02:00
parent da1566875b
commit 887d456ad4
4 changed files with 32 additions and 18 deletions

View File

@ -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
}
} }

View File

@ -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)
} }

View File

@ -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

View File

@ -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,