From df9f7fdc13cc7db6c6525a82f31534171fb04193 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Tue, 17 Dec 2024 16:07:02 +0100 Subject: [PATCH] feat(handlers): Added info logging --- handlers/barcode.go | 9 +++++++++ handlers/card.go | 17 +++++++++++++++-- handlers/certificate.go | 15 +++++++++++++-- handlers/contract.go | 15 +++++++++++++-- handlers/handlers.go | 2 ++ main.go | 1 + 6 files changed, 53 insertions(+), 6 deletions(-) diff --git a/handlers/barcode.go b/handlers/barcode.go index 7610005..a504d88 100644 --- a/handlers/barcode.go +++ b/handlers/barcode.go @@ -20,6 +20,8 @@ import ( // @Router /v1/barcodes/{type}/{content} [get] func (h *DefaultHandler) GenerateBarcode(c *fiber.Ctx) error { + logger := h.Logger.Named("GenerateBarcode") + // Get the type and content from the URL barcodeType := c.Params("type") barcodeContent := c.Params("content") @@ -32,6 +34,7 @@ func (h *DefaultHandler) GenerateBarcode(c *fiber.Ctx) error { // Convert width and height to integers width, err := strconv.Atoi(widthStr) if err != nil { + logger.Errorw("Invalid width parameter", "width", widthStr, "error", err) return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "error": "Invalid width parameter", }) @@ -39,6 +42,7 @@ func (h *DefaultHandler) GenerateBarcode(c *fiber.Ctx) error { height, err := strconv.Atoi(heightStr) if err != nil { + logger.Errorw("Invalid height parameter", "height", heightStr, "error", err) return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "error": "Invalid height parameter", }) @@ -46,18 +50,23 @@ func (h *DefaultHandler) GenerateBarcode(c *fiber.Ctx) error { padding, err := strconv.Atoi(paddingStr) if err != nil { + logger.Errorw("Invalid padding parameter", "padding", paddingStr, "error", err) return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "error": "Invalid padding parameter", }) } + logger = logger.With("type", barcodeType, "content", barcodeContent, "width", width, "height", height, "padding", padding) // Generate the barcode + logger.Info("Generating barcode") barcode, err := h.BarcodeService.GenerateBarcode(barcodeType, barcodeContent, width, height, padding) if err != nil { + logger.Errorw("Failed to generate barcode", "error", err) return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "error": err.Error(), }) } + logger.Info("Barcode generated") c.Set(fiber.HeaderContentType, "image/png") return c.Send(barcode.Bytes()) diff --git a/handlers/card.go b/handlers/card.go index dd9454d..7fc5469 100644 --- a/handlers/card.go +++ b/handlers/card.go @@ -1,7 +1,6 @@ package handlers import ( - "log" "slices" "git.odit.services/lfk/document-server/models" @@ -19,27 +18,35 @@ import ( // @Security ApiKeyAuth // @Router /v1/pdfs/cards [post] func (h *DefaultHandler) GenerateCard(c *fiber.Ctx) error { + + logger := h.Logger.Named("GenerateCard") + cardRequest := new(models.CardRequest) if err := c.BodyParser(cardRequest); err != nil { + logger.Errorw("Invalid request", "error", err) return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "error": err.Error(), }) } if !slices.Contains([]string{"en", "de"}, cardRequest.Locale) { + logger.Errorw("Invalid locale", "locale", cardRequest.Locale) return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "error": "Invalid locale", }) } + logger = logger.With("locale", cardRequest.Locale) + templateString, err := h.StaticService.GetTemplate(cardRequest.Locale, "card") if err != nil { - log.Println(err) + logger.Errorw("Template not found", "error", err) return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "error": "Template not found", }) } template, err := h.Templater.StringToTemplate(templateString) if err != nil { + logger.Errorw("Error parsing template", "error", err) return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "error": err.Error(), }) @@ -53,20 +60,26 @@ func (h *DefaultHandler) GenerateCard(c *fiber.Ctx) error { BarcodePrefix: h.Config.CardBarcodePrefix, } + logger.Info("Generating card html") result, err := h.Templater.Execute(template, genConfig) if err != nil { + logger.Errorw("Error executing template", "error", err) return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "error": err.Error(), }) } + logger.Info("Generated card html") c.Set(fiber.HeaderContentType, "text/html") + logger.Info("Converting html to pdf") pdf, err := h.Converter.ToPdf(result, "a4", false) if err != nil { + logger.Errorw("Error converting html to pdf", "error", err) return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "error": err.Error(), }) } + logger.Info("Converted html to pdf") c.Set(fiber.HeaderContentType, "application/pdf") c.Set(fiber.HeaderContentDisposition, "attachment; filename=runner-cards.pdf") diff --git a/handlers/certificate.go b/handlers/certificate.go index 37fc0b7..fb32700 100644 --- a/handlers/certificate.go +++ b/handlers/certificate.go @@ -1,7 +1,6 @@ package handlers import ( - "log" "slices" "git.odit.services/lfk/document-server/models" @@ -19,27 +18,35 @@ import ( // @Security ApiKeyAuth // @Router /v1/pdfs/certificates [post] func (h *DefaultHandler) GenerateCertificate(c *fiber.Ctx) error { + + logger := h.Logger.Named("GenerateCertificate") + certificateRequest := new(models.CertificateRequest) if err := c.BodyParser(certificateRequest); err != nil { + logger.Errorw("Invalid request", "error", err) return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "error": err.Error(), }) } if !slices.Contains([]string{"en", "de"}, certificateRequest.Locale) { + logger.Errorw("Invalid locale", "locale", certificateRequest.Locale) return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "error": "Invalid locale", }) } + logger = logger.With("locale", certificateRequest.Locale) + templateString, err := h.StaticService.GetTemplate(certificateRequest.Locale, "certificate") if err != nil { - log.Println(err) + logger.Errorw("Template not found", "error", err) return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "error": "Template not found", }) } template, err := h.Templater.StringToTemplate(templateString) if err != nil { + logger.Errorw("Error parsing template", "error", err) return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "error": err.Error(), }) @@ -53,20 +60,24 @@ func (h *DefaultHandler) GenerateCertificate(c *fiber.Ctx) error { Locale: certificateRequest.Locale, } + logger.Info("Generating certificate html") result, err := h.Templater.Execute(template, genConfig) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "error": err.Error(), }) } + logger.Info("Generated card html") c.Set(fiber.HeaderContentType, "text/html") + logger.Info("Converting html to pdf") pdf, err := h.Converter.ToPdf(result, "a4", false) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "error": err.Error(), }) } + logger.Info("Converted html to pdf") c.Set(fiber.HeaderContentType, "application/pdf") c.Set(fiber.HeaderContentDisposition, "attachment; filename=certificate.pdf") diff --git a/handlers/contract.go b/handlers/contract.go index 891ac70..1ece41b 100644 --- a/handlers/contract.go +++ b/handlers/contract.go @@ -1,7 +1,6 @@ package handlers import ( - "log" "slices" "git.odit.services/lfk/document-server/models" @@ -19,29 +18,37 @@ import ( // @Security ApiKeyAuth // @Router /v1/pdfs/contracts [post] func (h *DefaultHandler) GenerateContract(c *fiber.Ctx) error { + + logger := h.Logger.Named("GenerateContract") + contract := new(models.ContractRequest) if err := c.BodyParser(contract); err != nil { + logger.Errorw("Invalid request", "error", err) return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "error": err.Error(), }) } if !slices.Contains([]string{"en", "de"}, contract.Locale) { + logger.Errorw("Invalid locale", "locale", contract.Locale) return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "error": "Invalid locale", }) } + logger = logger.With("locale", contract.Locale) + contract.Runners = repeatRunnerArrayItems(contract.Runners, 2) templateString, err := h.StaticService.GetTemplate(contract.Locale, "contract") if err != nil { - log.Println(err) + logger.Errorw("Template not found", "error", err) return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ "error": "Template not found", }) } template, err := h.Templater.StringToTemplate(templateString) if err != nil { + logger.Errorw("Error parsing template", "error", err) return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "error": err.Error(), }) @@ -57,19 +64,23 @@ func (h *DefaultHandler) GenerateContract(c *fiber.Ctx) error { BarcodePrefix: h.Config.SponsoringBarcodePrefix, } + logger.Info("Generating contract html") result, err := h.Templater.Execute(template, genConfig) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "error": err.Error(), }) } + logger.Info("Generated contract html") + logger.Info("Converting html to pdf") pdf, err := h.Converter.ToPdf(result, "a5", true) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ "error": err.Error(), }) } + logger.Info("Converted html to pdf") c.Set(fiber.HeaderContentType, "application/pdf") c.Set(fiber.HeaderContentDisposition, "attachment; filename=runner-contracts.pdf") diff --git a/handlers/handlers.go b/handlers/handlers.go index 54ce596..db86adf 100644 --- a/handlers/handlers.go +++ b/handlers/handlers.go @@ -4,6 +4,7 @@ import ( "git.odit.services/lfk/document-server/models" "git.odit.services/lfk/document-server/services" "github.com/gofiber/fiber/v2" + "go.uber.org/zap" ) type Handler interface { @@ -19,4 +20,5 @@ type DefaultHandler struct { Templater services.Templater Converter services.Converter StaticService services.StaticService + Logger *zap.SugaredLogger } diff --git a/main.go b/main.go index c28842e..2977dc5 100644 --- a/main.go +++ b/main.go @@ -152,6 +152,7 @@ func main() { Converter: &services.GotenbergConverter{ BaseUrl: config.GotenbergBaseUrl, }, + Logger: logger, } logger.Debug("Initialized services")