github.com/mundipagg/boleto-api@v0.0.0-20230620145841-3f9ec742599f/api/logger.go (about) 1 package api 2 3 import ( 4 "strings" 5 "time" 6 7 "github.com/gin-gonic/gin" 8 "github.com/google/uuid" 9 "github.com/mundipagg/boleto-api/config" 10 "github.com/mundipagg/boleto-api/log" 11 "github.com/mundipagg/boleto-api/metrics" 12 "github.com/mundipagg/boleto-api/models" 13 "github.com/mundipagg/boleto-api/util" 14 ) 15 16 const ( 17 resultGetBoletoKey = "result" 18 ) 19 20 //registerBoletoLogger Middleware de log do request e response do registro da BoletoAPI 21 func registerBoletoLogger(c *gin.Context) { 22 boleto := getBoletoFromContext(c) 23 bank := getBankFromContext(c) 24 25 l := loadBankLog(c) 26 27 if config.Get().MockMode { 28 l.RequestApplication(boleto, c.Request.URL.RequestURI(), util.HeaderToMap(c.Request.Header)) 29 } else { 30 l.RequestApplication(boleto.MaskBoletoRequest(), c.Request.URL.RequestURI(), util.HeaderToMap(c.Request.Header)) 31 } 32 33 c.Next() 34 35 l = loadBankLog(c) 36 37 resp, _ := c.Get(responseKey) 38 39 if hasPanic(c) { 40 l.ResponseApplicationFatal(resp, c.Request.URL.RequestURI(), getErrorCodeToLog(c)) 41 } else { 42 l.ResponseApplication(resp, c.Request.URL.RequestURI(), getErrorCodeToLog(c)) 43 } 44 45 tag := bank.GetBankNameIntegration() + "-status" 46 metrics.PushBusinessMetric(tag, c.Writer.Status()) 47 } 48 49 //getBoletoLogger Middleware de log da operação de GetBoleto 50 func getBoletoLogger(c *gin.Context) { 51 start := time.Now() 52 c.Next() 53 elapsedTimeInMilliseconds := time.Since(start).Milliseconds() 54 55 result := getResultFromContext(c) 56 result.TotalElapsedTimeInMilliseconds = elapsedTimeInMilliseconds 57 58 log := log.CreateLog() 59 log.Operation = "GetBoleto" 60 log.IPAddress = c.ClientIP() 61 log.RequestKey = getRequestKeyFromContext(c) 62 63 log.GetBoleto(result, result.LogSeverity) 64 } 65 66 func loadBankLog(c *gin.Context) *log.Log { 67 boleto := getBoletoFromContext(c) 68 bank := getBankFromContext(c) 69 l := bank.Log() 70 l.Operation = "RegisterBoleto" 71 l.NossoNumero = getNossoNumeroFromContext(c) 72 l.Recipient = boleto.Recipient.Name 73 if boleto.HasPayeeGuarantor() { 74 l.PayeeGuarantor = boleto.PayeeGuarantor.Name 75 } 76 l.RequestKey = boleto.RequestKey 77 l.BankName = bank.GetBankNameIntegration() 78 l.IPAddress = c.ClientIP() 79 l.ServiceUser = getUserFromContext(c) 80 return l 81 } 82 83 func getResultFromContext(c *gin.Context) *models.GetBoletoResult { 84 if result, exists := c.Get(resultGetBoletoKey); exists { 85 return result.(*models.GetBoletoResult) 86 } 87 return nil 88 } 89 90 func getRequestKeyFromContext(c *gin.Context) string { 91 var requestKey string 92 requestKey = c.Request.Header.Get("RequestKey") 93 if requestKey == "" { 94 uid, _ := uuid.NewUUID() 95 requestKey = uid.String() 96 } 97 98 return strings.ToLower(requestKey) 99 }