67 lines
1.2 KiB
Go
67 lines
1.2 KiB
Go
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))
|
|
}
|