From ec843af27275d935dddb0c660145e579a21437fe Mon Sep 17 00:00:00 2001 From: Vladislav Veselskiy Date: Tue, 28 Jan 2025 12:08:50 +0300 Subject: [PATCH] Save resopnse to span. --- fcm.go | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/fcm.go b/fcm.go index 959782e..0d53062 100644 --- a/fcm.go +++ b/fcm.go @@ -29,6 +29,7 @@ import ( "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/codes" ) const tracerName = "git.bit5.ru/backend/fcm" @@ -164,11 +165,15 @@ func (c *Client) doSendRequest(ctx context.Context, req SendRequest, loggerEnabl accessToken, err := c.ts.Token() if err != nil { + span.SetStatus(codes.Error, err.Error()) + span.RecordError(err) return SendResponse{}, err } data, err := json.Marshal(req) if err != nil { + span.SetStatus(codes.Error, err.Error()) + span.RecordError(err) return SendResponse{}, errors.WithStack(err) } if loggerEnabled { @@ -177,6 +182,8 @@ func (c *Client) doSendRequest(ctx context.Context, req SendRequest, loggerEnabl request, err := http.NewRequest(http.MethodPost, c.cfg.SendEndpoint, bytes.NewReader(data)) if err != nil { + span.SetStatus(codes.Error, err.Error()) + span.RecordError(err) return SendResponse{}, errors.WithStack(err) } @@ -189,22 +196,33 @@ func (c *Client) doSendRequest(ctx context.Context, req SendRequest, loggerEnabl } defer response.Body.Close() + body, err := io.ReadAll(response.Body) + if err != nil { + span.SetStatus(codes.Error, err.Error()) + span.RecordError(err) + return SendResponse{}, errors.WithStack(err) + } + + bodyStr := string(body) + span.SetAttributes( attribute.Int("response.status_code", response.StatusCode), + attribute.String("response_body", bodyStr), ) if response.StatusCode != http.StatusOK { - body, err := ioutil.ReadAll(response.Body) - if err != nil { - return SendResponse{}, errors.WithStack(err) - } - - return SendResponse{}, errors.New(string(body)) + err := errors.Errorf("Status is not OK. Status: %d. Body: %s", response.StatusCode, bodyStr) + span.SetStatus(codes.Error, err.Error()) + span.RecordError(err) + return SendResponse{}, err } var resp SendResponse - if err := json.NewDecoder(response.Body).Decode(&resp); err != nil { - return SendResponse{}, errors.WithStack(err) + if err := json.Unmarshal(body, &resp); err != nil { + newErr := errors.Errorf("Can not parse send response as JSON. Response: %q. Error: %v", string(body), err) + span.SetStatus(codes.Error, err.Error()) + span.RecordError(err) + return SendResponse{}, newErr } return resp, nil