refactor(notif): replace RangeAllParalel with for loop and WaitGroup in dispatch

This commit is contained in:
yusing
2025-08-16 23:58:59 +08:00
parent 6b89cd9106
commit a836920eca

View File

@@ -3,6 +3,7 @@ package notif
import ( import (
"math" "math"
"math/rand/v2" "math/rand/v2"
"sync"
"time" "time"
"github.com/rs/zerolog" "github.com/rs/zerolog"
@@ -96,20 +97,26 @@ func (disp *Dispatcher) dispatch(msg *LogMessage) {
Str("level", msg.Level.String()). Str("level", msg.Level.String()).
Str("title", msg.Title).Logger() Str("title", msg.Title).Logger()
disp.providers.RangeAllParallel(func(p Provider) { var wg sync.WaitGroup
if err := msg.notify(task.Context(), p); err != nil { for p := range disp.providers.Range {
msg := &RetryMessage{ wg.Add(1)
Message: msg, go func(p Provider) {
Trials: 0, defer wg.Done()
Provider: p, if err := msg.notify(task.Context(), p); err != nil {
NextRetry: time.Now().Add(calculateBackoffDelay(0)), msg := &RetryMessage{
Message: msg,
Trials: 0,
Provider: p,
NextRetry: time.Now().Add(calculateBackoffDelay(0)),
}
disp.retryMsg.Add(msg)
l.Debug().Err(err).EmbedObject(msg).Msg("notification failed, scheduling retry")
} else {
l.Debug().Str("provider", p.GetName()).Msg("notification sent successfully")
} }
disp.retryMsg.Add(msg) }(p)
l.Debug().Err(err).EmbedObject(msg).Msg("notification failed, scheduling retry") }
} else { wg.Wait()
l.Debug().Str("provider", p.GetName()).Msg("notification sent successfully")
}
})
} }
func (disp *Dispatcher) processRetries() { func (disp *Dispatcher) processRetries() {