Browse Source

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
pull/221/head
Aldino Kemal 1 year ago
parent
commit
c3bd17fd87
  1. 3
      src/pkg/whatsapp/utils.go
  2. 7
      src/pkg/whatsapp/webhook.go

3
src/pkg/whatsapp/utils.go

@ -142,7 +142,8 @@ func IsOnWhatsapp(waCli *whatsmeow.Client, jid string) bool {
if strings.Contains(jid, "@s.whatsapp.net") { if strings.Contains(jid, "@s.whatsapp.net") {
data, err := waCli.IsOnWhatsApp([]string{jid}) data, err := waCli.IsOnWhatsApp([]string{jid})
if err != nil { 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 { for _, v := range data {

7
src/pkg/whatsapp/webhook.go

@ -63,6 +63,7 @@ func createPayload(evt *events.Message) (map[string]interface{}, error) {
if imageMedia != nil { if imageMedia != nil {
path, err := ExtractMedia(config.PathMedia, imageMedia) path, err := ExtractMedia(config.PathMedia, imageMedia)
if err != nil { 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)) return nil, pkgError.WebhookError(fmt.Sprintf("Failed to download image: %v", err))
} }
body["image"] = path body["image"] = path
@ -70,6 +71,7 @@ func createPayload(evt *events.Message) (map[string]interface{}, error) {
if stickerMedia != nil { if stickerMedia != nil {
path, err := ExtractMedia(config.PathMedia, stickerMedia) path, err := ExtractMedia(config.PathMedia, stickerMedia)
if err != nil { 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)) return nil, pkgError.WebhookError(fmt.Sprintf("Failed to download sticker: %v", err))
} }
body["sticker"] = path body["sticker"] = path
@ -77,6 +79,7 @@ func createPayload(evt *events.Message) (map[string]interface{}, error) {
if videoMedia != nil { if videoMedia != nil {
path, err := ExtractMedia(config.PathMedia, videoMedia) path, err := ExtractMedia(config.PathMedia, videoMedia)
if err != nil { 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)) return nil, pkgError.WebhookError(fmt.Sprintf("Failed to download video: %v", err))
} }
body["video"] = path body["video"] = path
@ -84,6 +87,7 @@ func createPayload(evt *events.Message) (map[string]interface{}, error) {
if audioMedia != nil { if audioMedia != nil {
path, err := ExtractMedia(config.PathMedia, audioMedia) path, err := ExtractMedia(config.PathMedia, audioMedia)
if err != nil { 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)) return nil, pkgError.WebhookError(fmt.Sprintf("Failed to download audio: %v", err))
} }
body["audio"] = path body["audio"] = path
@ -91,6 +95,7 @@ func createPayload(evt *events.Message) (map[string]interface{}, error) {
if documentMedia != nil { if documentMedia != nil {
path, err := ExtractMedia(config.PathMedia, documentMedia) path, err := ExtractMedia(config.PathMedia, documentMedia)
if err != nil { 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)) return nil, pkgError.WebhookError(fmt.Sprintf("Failed to download document: %v", err))
} }
body["document"] = path body["document"] = path
@ -127,8 +132,10 @@ func submitWebhook(payload map[string]interface{}) error {
for attempt = 0; attempt < maxAttempts; attempt++ { for attempt = 0; attempt < maxAttempts; attempt++ {
if _, err = client.Do(req); err == nil { if _, err = client.Do(req); err == nil {
logrus.Infof("Successfully submitted webhook on attempt %d", attempt+1)
return nil return nil
} }
logrus.Warnf("Attempt %d to submit webhook failed: %v", attempt+1, err)
time.Sleep(sleepDuration) time.Sleep(sleepDuration)
sleepDuration *= 2 sleepDuration *= 2
} }

Loading…
Cancel
Save