mirror of
https://github.com/sablierapp/sablier.git
synced 2025-12-25 06:49:31 +01:00
64 lines
1.2 KiB
Go
64 lines
1.2 KiB
Go
package server
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/rs/zerolog"
|
|
"github.com/sablierapp/sablier/pkg/sablier"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
func Start(ctx context.Context, s *sablier.Sablier, log zerolog.Logger) {
|
|
start := time.Now()
|
|
|
|
// Set web server mode.
|
|
/*
|
|
if conf.HttpMode() != "" {
|
|
gin.SetMode(conf.HttpMode())
|
|
} else if conf.Debug() == false {
|
|
gin.SetMode(gin.ReleaseMode)
|
|
}
|
|
*/
|
|
|
|
// Create new r engine without standard middleware.
|
|
r := gin.New()
|
|
|
|
r.Use(StructuredLogger(log))
|
|
r.Use(Recovery())
|
|
|
|
registerRoutes(r, s)
|
|
|
|
var server *http.Server
|
|
server = &http.Server{
|
|
Addr: "0.0.0.0:10000",
|
|
Handler: r,
|
|
}
|
|
|
|
log.Info().
|
|
Str("listen", server.Addr).
|
|
Dur("startup", time.Since(start))
|
|
|
|
go StartHttp(server, log)
|
|
|
|
// Graceful web server shutdown.
|
|
<-ctx.Done()
|
|
log.Info().Msg("server: shutting down")
|
|
err := server.Close()
|
|
if err != nil {
|
|
log.Err(err).Msg("server: shutdown failed")
|
|
}
|
|
}
|
|
|
|
// StartHttp starts the Web server in http mode.
|
|
func StartHttp(s *http.Server, log zerolog.Logger) {
|
|
if err := s.ListenAndServe(); err != nil {
|
|
if errors.Is(err, http.ErrServerClosed) {
|
|
log.Info().Msg("server: shutdown complete")
|
|
} else {
|
|
log.Err(err).Msg("server: shutdown failed")
|
|
}
|
|
}
|
|
}
|