diff --git a/fcm.go b/fcm.go index dece97f..bb2459c 100644 --- a/fcm.go +++ b/fcm.go @@ -410,7 +410,18 @@ func (c *Client) SendEach(ctx context.Context, messages []Message) (MessageMulti ctx, span := tracer.Start(ctx, "Client.SendEach") defer span.End() - return c.doSendEachInBatch(ctx, messages, false) + resp, err := c.doSendEachInBatch(ctx, messages, false) + if err != nil { + span.SetStatus(codes.Error, err.Error()) + span.RecordError(err) + return MessageMultiSendResponse{}, err + } + + if resp.Failed > 0 { + span.SetStatus(codes.Error, "Some notifications not sent.") + } + + return resp, nil } func (c *Client) doSendEachInBatch( @@ -426,8 +437,12 @@ func (c *Client) doSendEachInBatch( if messageCount == 0 { return MessageMultiSendResponse{}, nil } + if messageCount > maxMessages { - return MessageMultiSendResponse{}, errors.New(fmt.Sprintf("messages limit (%d) exceeded: %d", maxMessages, messageCount)) + err := errors.New(fmt.Sprintf("messages limit (%d) exceeded: %d", maxMessages, messageCount)) + span.SetStatus(codes.Error, err.Error()) + span.RecordError(err) + return MessageMultiSendResponse{}, err } var responses = make([]MessageSendResponse, len(messages)) @@ -453,6 +468,7 @@ func (c *Client) doSendEachInBatch( MessageID: resp, } } else { + span.SetStatus(codes.Error, "Some notifications not sent.") responses[idx] = MessageSendResponse{ Success: false, Error: err, @@ -463,30 +479,28 @@ func (c *Client) doSendEachInBatch( // Wait for all Validate/Send calls to finish wg.Wait() - successAmount := 0 + sentAmount := 0 for _, r := range responses { if r.Success { - successAmount++ + sentAmount++ } } - failedAmount := len(responses) - successAmount + failedAmount := len(responses) - sentAmount span.SetAttributes( - attribute.Int("res.total", len(responses)), - attribute.Int("res.sent", successAmount), - attribute.Int("res.failed", failedAmount), + attribute.Int("resp.total", len(responses)), + attribute.Int("resp.sent_amount", sentAmount), + attribute.Int("resp.failed_amount", failedAmount), ) - if failedAmount > 0 { - span.SetStatus(codes.Error, "Got errors from method Client.Send().") + resp := MessageMultiSendResponse{ + Responses: responses, + Sent: sentAmount, + Failed: failedAmount, } - return MessageMultiSendResponse{ - Responses: responses, - Sent: successAmount, - Failed: failedAmount, - }, nil + return resp, nil } type MessageSendResponse struct {