@@ -130,77 +130,90 @@ func (s *Service) sendAll(ctx context.Context) {
130130 return
131131 }
132132
133- wrappers := lo .MapEntries (
134- rawEvents ,
135- func (key string , value []byte ) (string , * eventWrapper ) {
133+ wrappers := lo .FilterMap (
134+ lo . Values ( rawEvents ) ,
135+ func (value []byte , _ int ) (* eventWrapper , bool ) {
136136 wrapper := new (eventWrapper )
137137 if err := wrapper .deserialize (value ); err != nil {
138138 s .metrics .IncError (1 )
139- s .logger .Error ("Failed to deserialize event wrapper" , zap .String ( "key" , key ), zap . Binary ("value" , value ), zap .Error (err ))
140- return "" , nil
139+ s .logger .Error ("Failed to deserialize event wrapper" , zap .Binary ("value" , value ), zap .Error (err ))
140+ return nil , false
141141 }
142142
143- return wrapper . Token , wrapper
143+ return wrapper , true
144144 },
145145 )
146- delete (wrappers , "" )
147146
148- messages := lo .MapValues (
147+ messages := lo .Map (
149148 wrappers ,
150- func (value * eventWrapper , key string ) Event {
151- return value .Event
149+ func (wrapper * eventWrapper , _ int ) types.Message {
150+ return types.Message {
151+ Token : wrapper .Token ,
152+ Event : wrapper .Event ,
153+ }
152154 },
153155 )
154156
155- s .logger .Info ("Sending messages" , zap .Int ("count" , len (messages )))
157+ totalMessages := len (messages )
158+ if totalMessages == 0 {
159+ return
160+ }
161+
162+ s .logger .Info ("sending messages" , zap .Int ("total" , totalMessages ))
163+
156164 sendCtx , cancel := context .WithTimeout (ctx , s .config .Timeout )
157165 defer cancel ()
158-
159166 errs , err := s .client .Send (sendCtx , messages )
160167 if len (errs ) == 0 && err == nil {
161- s .logger .Info ("Messages sent successfully" , zap .Int ("count " , len ( messages ) ))
168+ s .logger .Info ("messages sent successfully" , zap .Int ("total " , totalMessages ))
162169 return
163170 }
164171
165172 if err != nil {
166- s .metrics .IncError (len ( messages ) )
167- s .logger .Error ("Can't send messages" , zap .Error (err ))
173+ s .metrics .IncError (totalMessages )
174+ s .logger .Error ("failed to send messages" , zap . Int ( "total" , totalMessages ) , zap .Error (err ))
168175 return
169176 }
170177
171- s .metrics .IncError (len (errs ))
178+ totalErrors := lo .CountBy (errs , func (err error ) bool { return err != nil })
179+ s .metrics .IncError (totalErrors )
180+
181+ for i , err := range errs {
182+ if err == nil {
183+ continue
184+ }
172185
173- for token , sendErr := range errs {
174- s . logger . Error ( "Can't send message" , zap . Error ( sendErr ), zap . String ( "token" , token ))
186+ wrapper := wrappers [ i ]
187+ token := wrapper . Token
175188
176- wrapper := wrappers [token ]
177189 wrapper .Retries ++
178190
179191 if wrapper .Retries >= maxRetries {
180192 if err := s .blacklist .Set (ctx , token , []byte {}, cacheImpl .WithTTL (blacklistTimeout )); err != nil {
181- s .logger .Warn ("Can't add to blacklist" , zap .String ("token" , token ), zap .Error (err ))
193+ s .logger .Warn ("failed to blacklist" , zap .String ("token" , token ), zap .Error (err ))
194+ continue
182195 }
183196
184197 s .metrics .IncBlacklist (BlacklistOperationAdded )
185- s .metrics .IncRetry (RetryOutcomeMaxAttempts )
186- s .logger .Warn ("Retries exceeded, blacklisting token" ,
198+ s .logger .Warn ("retries exceeded, blacklisting token" ,
187199 zap .String ("token" , token ),
188- zap .Duration ("ttl" , blacklistTimeout ))
200+ zap .Duration ("ttl" , blacklistTimeout ),
201+ )
189202 continue
190203 }
191204
192205 wrapperData , err := wrapper .serialize ()
193206 if err != nil {
194207 s .metrics .IncError (1 )
195- s .logger .Error ("Can't serialize event wrapper" , zap .Error (err ))
208+ s .logger .Error ("failed to serialize event wrapper" , zap .Error (err ))
196209 continue
197210 }
198211
199212 if setErr := s .events .SetOrFail (ctx , wrapper .key (), wrapperData ); setErr != nil {
200- s .logger .Warn ("Can't set message to cache" , zap .Error (setErr ))
213+ s .logger .Warn ("failed to set message to cache" , zap . String ( "key" , wrapper . key ()) , zap .Error (setErr ))
201214 continue
202215 }
203216
204- s .metrics .IncRetry (RetryOutcomeRetried )
217+ s .metrics .IncRetry ()
205218 }
206219}
0 commit comments