1
0
Fork 0

refactor: extract server from main.go to it's own package

This commit is contained in:
Vojtěch Mareš 2024-05-04 12:22:42 +02:00
parent 1413fde9f0
commit 24e99a3b08
Signed by: vojtech.mares
GPG key ID: C6827B976F17240D
2 changed files with 72 additions and 44 deletions

View file

@ -2,16 +2,15 @@ package main
import ( import (
"context" "context"
"fmt"
"os/signal" "os/signal"
"syscall" "syscall"
"time"
fiberzap "github.com/gofiber/contrib/fiberzap/v2" "gitlab.mareshq.com/hq/yggdrasil/internal/server"
"github.com/gofiber/fiber/v2"
"go.uber.org/zap" "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 var port = 3000
func main() { func main() {
@ -20,45 +19,7 @@ func main() {
logger := zap.Must(zap.NewDevelopment()) logger := zap.Must(zap.NewDevelopment())
defer logger.Sync() defer logger.Sync()
sugared := logger.Sugar()
config := fiber.Config{ server := server.NewServer(port, logger)
DisableStartupMessage: true, server.Run(shutdownCtx)
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.")
} }

67
internal/server/server.go Normal file
View file

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