Files
sablier/internal/server/server.go
2025-01-07 14:19:07 -05:00

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