Skip to content

Commit b89a721

Browse files
authored
Update maybe_log_send_result/2 with proper error (#789)
1 parent b8e40d7 commit b89a721

File tree

3 files changed

+35
-80
lines changed

3 files changed

+35
-80
lines changed

lib/sentry/client.ex

Lines changed: 31 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -300,41 +300,40 @@ defmodule Sentry.Client do
300300
end
301301
end
302302

303-
defp maybe_log_send_result(_send_result, %Event{source: :logger}) do
303+
def maybe_log_send_result(_send_result, %Event{source: :logger}) do
304304
:ok
305305
end
306306

307-
defp maybe_log_send_result(send_result, _other) do
308-
message =
309-
case send_result do
310-
{:error, {:invalid_json, error}} ->
311-
"Unable to encode JSON Sentry error - #{inspect(error)}"
312-
313-
{:error, {:request_failure, last_error}} ->
314-
case last_error do
315-
{kind, data, stacktrace}
316-
when kind in [:exit, :throw, :error] and is_list(stacktrace) ->
317-
Exception.format(kind, data, stacktrace)
318-
319-
_other ->
320-
"Error in HTTP Request to Sentry - #{inspect(last_error)}"
321-
end
322-
323-
{:error, {status, headers, _body}} ->
324-
error_header =
325-
:proplists.get_value("X-Sentry-Error", headers, nil) ||
326-
:proplists.get_value("x-sentry-error", headers, nil) || ""
327-
328-
if error_header != "" do
329-
"Received #{status} from Sentry server: #{error_header}"
330-
else
331-
"Received #{status} from Sentry server"
332-
end
333-
334-
{:ok, _} ->
335-
nil
336-
end
307+
def maybe_log_send_result(send_result, events) do
308+
if is_list(events) && Enum.any?(events, &(&1.source == :logger)) do
309+
:ok
310+
else
311+
message =
312+
case send_result do
313+
{:error, {:invalid_json, error}} ->
314+
"Failed to send Sentry event. Unable to encode JSON Sentry error - #{inspect(error)}"
315+
316+
{:error, {:request_failure, last_error}} ->
317+
case last_error do
318+
{kind, data, stacktrace}
319+
when kind in [:exit, :throw, :error] and is_list(stacktrace) ->
320+
Exception.format(kind, data, stacktrace)
321+
322+
_other ->
323+
"Failed to send Sentry event. Error in HTTP Request to Sentry - #{inspect(last_error)}"
324+
end
337325

338-
if message, do: LoggerUtils.log(fn -> ["Failed to send Sentry event. ", message] end)
326+
{:error, {status, headers, body}} ->
327+
ClientError.server_error(status, headers, body) |> ClientError.message()
328+
329+
{:error, reason} ->
330+
ClientError.new(reason) |> ClientError.message()
331+
332+
{:ok, _} ->
333+
nil
334+
end
335+
336+
if message, do: LoggerUtils.log(fn -> [message] end)
337+
end
339338
end
340339
end

lib/sentry/transport/sender.ex

Lines changed: 2 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ defmodule Sentry.Transport.Sender do
33

44
use GenServer
55

6-
alias Sentry.{Envelope, Event, LoggerUtils, Transport}
6+
alias Sentry.{Envelope, Event, Transport, Client}
77

88
require Logger
99

@@ -44,55 +44,11 @@ defmodule Sentry.Transport.Sender do
4444
event
4545
|> Envelope.from_event()
4646
|> Transport.post_envelope(client)
47-
|> maybe_log_send_result([event])
47+
|> Client.maybe_log_send_result([event])
4848

4949
# We sent an event, so we can decrease the number of queued events.
5050
Transport.SenderPool.decrease_queued_events_counter()
5151

5252
{:noreply, state}
5353
end
54-
55-
## Helpers
56-
57-
defp maybe_log_send_result(send_result, events) do
58-
if Enum.any?(events, &(&1.source == :logger)) do
59-
:ok
60-
else
61-
message =
62-
case send_result do
63-
{:error, {:invalid_json, error}} ->
64-
"Unable to encode JSON Sentry error - #{inspect(error)}"
65-
66-
{:error, {:request_failure, last_error}} ->
67-
case last_error do
68-
{kind, data, stacktrace}
69-
when kind in [:exit, :throw, :error] and is_list(stacktrace) ->
70-
Exception.format(kind, data, stacktrace)
71-
72-
_other ->
73-
"Error in HTTP Request to Sentry - #{inspect(last_error)}"
74-
end
75-
76-
{:error, http_reponse} ->
77-
{status, headers, _body} = http_reponse
78-
79-
error_header =
80-
:proplists.get_value("X-Sentry-Error", headers, nil) ||
81-
:proplists.get_value("x-sentry-error", headers, nil) || ""
82-
83-
if error_header != "" do
84-
"Received #{status} from Sentry server: #{error_header}"
85-
else
86-
"Received #{status} from Sentry server"
87-
end
88-
89-
_ ->
90-
nil
91-
end
92-
93-
if message do
94-
LoggerUtils.log(fn -> ["Failed to send Sentry event. ", message] end)
95-
end
96-
end
97-
end
9854
end

test/sentry/client_test.exs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,8 +297,8 @@ defmodule Sentry.ClientTest do
297297
end)
298298

299299
assert log =~ "[info]"
300-
assert log =~ "Failed to send Sentry event."
301-
assert log =~ "Received 400 from Sentry server: Rate limiting."
300+
assert log =~ "Sentry failed to report event"
301+
assert log =~ "400"
302302
end
303303

304304
test "returns an error if Sentry server responds with error status", %{bypass: bypass} do

0 commit comments

Comments
 (0)