refactor: extract server from main.go to it's own package
This commit is contained in:
parent
1413fde9f0
commit
24e99a3b08
2 changed files with 72 additions and 44 deletions
|
|
@ -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
67
internal/server/server.go
Normal 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))
|
||||||
|
}
|
||||||
Reference in a new issue