catalog-service/src/internal/app/server/server.go
Piotr Biernat 6f7952d166
All checks were successful
continuous-integration/drone/push Build is passing
vendor support and image build optimalization
2022-12-01 05:51:11 +01:00

104 lines
2.0 KiB
Go

package server
import (
"os"
"os/signal"
"time"
"github.com/gofiber/fiber/v2"
"github.com/jackc/pgx/v4/pgxpool"
"github.com/streadway/amqp"
discovery "git.pbiernat.dev/egommerce/go-api-pkg/consul"
"git.pbiernat.dev/egommerce/go-api-pkg/fluentd"
)
type Server struct {
*fiber.App
log *fluentd.Logger
db *pgxpool.Pool
ebCh *amqp.Channel
discovery *discovery.Service
name string
addr string
}
type RequestID struct {
RequestID string `reqHeader:"x-request-id"`
}
func NewServer(conf *Config, logger *fluentd.Logger, db *pgxpool.Pool, ebCh *amqp.Channel) *Server {
discovery, err := discovery.NewService(conf.RegistryAddr, conf.AppName, conf.AppDomain, conf.Port)
if err != nil {
logger.Log("Error connecting to %s: %v", conf.RegistryAddr, err)
}
logger.Log("Registering service with name: %s, address: %s", discovery.Name, discovery.Address)
err = discovery.Register()
if err != nil {
logger.Log(err.Error())
}
cnf := fiber.Config{
AppName: conf.AppName,
ServerHeader: conf.AppDomain,
ReadTimeout: time.Millisecond * 50,
WriteTimeout: time.Millisecond * 50,
IdleTimeout: time.Millisecond * 50,
}
s := &Server{
fiber.New(cnf),
logger,
db,
ebCh,
discovery,
conf.AppName,
conf.NetAddr,
}
SetupMiddlewares(s)
SetupRoutes(s)
return s
}
func (s *Server) Start() {
err := s.Listen(s.addr)
s.log.Log("Starting error: %v", err)
}
func (s *Server) StartWithGracefulShutdown() {
idle := make(chan struct{})
go func() {
sigint := make(chan os.Signal, 1)
signal.Notify(sigint, os.Interrupt)
<-sigint
if err := s.Shutdown(); err != nil {
s.log.Log("Server is not shutting down! Reason: %v", err)
}
s.log.Log("Server is going down...")
s.discovery.Unregister()
close(idle)
}()
if err := s.Listen(s.addr); err != nil {
s.log.Log("Server is not running! Reason: %v", err)
}
<-idle
}
func (s *Server) GetRequestID(c *fiber.Ctx) (string, error) {
var hdr = new(RequestID)
if err := c.ReqHeaderParser(hdr); err != nil {
return "", err
}
return hdr.RequestID, nil
}