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