diff --git a/cmd/yggdrasil/main.go b/cmd/yggdrasil/main.go index b2eb4e6..5b75b32 100644 --- a/cmd/yggdrasil/main.go +++ b/cmd/yggdrasil/main.go @@ -2,16 +2,15 @@ package main import ( "context" - "fmt" "os/signal" "syscall" - "time" - fiberzap "github.com/gofiber/contrib/fiberzap/v2" - "github.com/gofiber/fiber/v2" + "gitlab.mareshq.com/hq/yggdrasil/internal/server" "go.uber.org/zap" ) +//go:generate go run github.com/deepmap/oapi-codegen/v2/cmd/oapi-codegen --config=../../oapi-codegen.yaml ../../api/v1/openapi.yaml + var port = 3000 func main() { @@ -20,45 +19,7 @@ func main() { logger := zap.Must(zap.NewDevelopment()) defer logger.Sync() - sugared := logger.Sugar() - config := fiber.Config{ - DisableStartupMessage: true, - - IdleTimeout: 10 * time.Second, - ReadTimeout: 10 * time.Second, - WriteTimeout: 10 * time.Second, - } - - app := fiber.New(config) - - app.Get("/", func(c *fiber.Ctx) error { - return c.SendString("Hello, World!") - }) - - app.Use(fiberzap.New(fiberzap.Config{ - Logger: logger, - })) - - go func() { - err := app.Listen(fmt.Sprintf(":%d", port)) - if err != nil { - panic(err) - } - }() - - sugared.Infow("Yggdrasil is now running", "port", port) - - <-shutdownCtx.Done() - stop() - - sugared.Infoln("Shutting down gracefully...") - err := app.ShutdownWithTimeout(10 * time.Second) - if err != nil { - panic(err) - } - - // Cleanup code here - - sugared.Infoln("Yggdrasil shut down gracefully.") + server := server.NewServer(port, logger) + server.Run(shutdownCtx) } diff --git a/internal/server/server.go b/internal/server/server.go new file mode 100644 index 0000000..c41e04a --- /dev/null +++ b/internal/server/server.go @@ -0,0 +1,67 @@ +package server + +import ( + "context" + "fmt" + "time" + + fiberzap "github.com/gofiber/contrib/fiberzap/v2" + "github.com/gofiber/fiber/v2" + "go.uber.org/zap" +) + +type Server struct { + port int + logger *zap.Logger +} + +func NewServer(port int, logger *zap.Logger) *Server { + return &Server{ + port: port, + logger: logger, + } +} + +func (s *Server) Run(ctx context.Context) { + sugared := s.logger.Sugar() + + config := fiber.Config{ + DisableStartupMessage: true, + + IdleTimeout: 10 * time.Second, + ReadTimeout: 10 * time.Second, + WriteTimeout: 10 * time.Second, + } + + app := fiber.New(config) + + app.Use(fiberzap.New(fiberzap.Config{ + Logger: s.logger, + })) + + app.Get("/", func(c *fiber.Ctx) error { + return c.SendString("Hello, World!") + }) + + go func() { + err := app.Listen(fmt.Sprintf(":%d", s.port)) + if err != nil { + panic(err) + } + }() + + sugared.Infow("HTTP server is now running", "port", s.port) + + <-ctx.Done() + shutdownBegan := time.Now() + + sugared.Infoln("Shutting HTTP server down gracefully...") + err := app.ShutdownWithTimeout(10 * time.Second) + if err != nil { + panic(err) + } + + // Cleanup code here + + sugared.Infow("HTTP server shut down gracefully.", "took", time.Since(shutdownBegan)) +}