From c3bd17fd870dfb9341d1ee1014c431ea114b9f2e Mon Sep 17 00:00:00 2001 From: Aldino Kemal Date: Thu, 19 Dec 2024 21:38:32 +0700 Subject: [PATCH] fix: improve error handling and logging fix(utils.go): replace panic with logrus error logging and return false fix(webhook.go): add logrus error logging when media download fails fix(webhook.go): add logrus info and warning logging for webhook submission attempts --- src/pkg/whatsapp/utils.go | 3 ++- src/pkg/whatsapp/webhook.go | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/pkg/whatsapp/utils.go b/src/pkg/whatsapp/utils.go index e48cd74..f737009 100644 --- a/src/pkg/whatsapp/utils.go +++ b/src/pkg/whatsapp/utils.go @@ -142,7 +142,8 @@ func IsOnWhatsapp(waCli *whatsmeow.Client, jid string) bool { if strings.Contains(jid, "@s.whatsapp.net") { data, err := waCli.IsOnWhatsApp([]string{jid}) if err != nil { - panic(pkgError.InvalidJID(err.Error())) + logrus.Error("Failed to check if user is on whatsapp: ", err) + return false } for _, v := range data { diff --git a/src/pkg/whatsapp/webhook.go b/src/pkg/whatsapp/webhook.go index 98643fa..13936f2 100644 --- a/src/pkg/whatsapp/webhook.go +++ b/src/pkg/whatsapp/webhook.go @@ -63,6 +63,7 @@ func createPayload(evt *events.Message) (map[string]interface{}, error) { if imageMedia != nil { path, err := ExtractMedia(config.PathMedia, imageMedia) if err != nil { + logrus.Errorf("Failed to download image from %s: %v", evt.Info.SourceString(), err) return nil, pkgError.WebhookError(fmt.Sprintf("Failed to download image: %v", err)) } body["image"] = path @@ -70,6 +71,7 @@ func createPayload(evt *events.Message) (map[string]interface{}, error) { if stickerMedia != nil { path, err := ExtractMedia(config.PathMedia, stickerMedia) if err != nil { + logrus.Errorf("Failed to download sticker from %s: %v", evt.Info.SourceString(), err) return nil, pkgError.WebhookError(fmt.Sprintf("Failed to download sticker: %v", err)) } body["sticker"] = path @@ -77,6 +79,7 @@ func createPayload(evt *events.Message) (map[string]interface{}, error) { if videoMedia != nil { path, err := ExtractMedia(config.PathMedia, videoMedia) if err != nil { + logrus.Errorf("Failed to download video from %s: %v", evt.Info.SourceString(), err) return nil, pkgError.WebhookError(fmt.Sprintf("Failed to download video: %v", err)) } body["video"] = path @@ -84,6 +87,7 @@ func createPayload(evt *events.Message) (map[string]interface{}, error) { if audioMedia != nil { path, err := ExtractMedia(config.PathMedia, audioMedia) if err != nil { + logrus.Errorf("Failed to download audio from %s: %v", evt.Info.SourceString(), err) return nil, pkgError.WebhookError(fmt.Sprintf("Failed to download audio: %v", err)) } body["audio"] = path @@ -91,6 +95,7 @@ func createPayload(evt *events.Message) (map[string]interface{}, error) { if documentMedia != nil { path, err := ExtractMedia(config.PathMedia, documentMedia) if err != nil { + logrus.Errorf("Failed to download document from %s: %v", evt.Info.SourceString(), err) return nil, pkgError.WebhookError(fmt.Sprintf("Failed to download document: %v", err)) } body["document"] = path @@ -127,8 +132,10 @@ func submitWebhook(payload map[string]interface{}) error { for attempt = 0; attempt < maxAttempts; attempt++ { if _, err = client.Do(req); err == nil { + logrus.Infof("Successfully submitted webhook on attempt %d", attempt+1) return nil } + logrus.Warnf("Attempt %d to submit webhook failed: %v", attempt+1, err) time.Sleep(sleepDuration) sleepDuration *= 2 }