Skip to content

Commit 3f8c2e2

Browse files
Refactor maybe_log_send_result/2 (#799)
Co-authored-by: Andrea Leopardi <[email protected]>
1 parent 277b1f8 commit 3f8c2e2

File tree

4 files changed

+42
-43
lines changed

4 files changed

+42
-43
lines changed

lib/sentry/client.ex

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ defmodule Sentry.Client do
3939
|> Envelope.from_check_in()
4040
|> Transport.encode_and_post_envelope(client, request_retries)
4141

42-
_ = maybe_log_send_result(send_result, check_in)
4342
send_result
4443
end
4544

@@ -175,7 +174,6 @@ defmodule Sentry.Client do
175174
|> Envelope.from_event()
176175
|> Transport.encode_and_post_envelope(client, request_retries)
177176

178-
_ = maybe_log_send_result(send_result, event)
179177
send_result
180178
end
181179
end
@@ -296,30 +294,4 @@ defmodule Sentry.Client do
296294
{value, map} -> Map.put(map, key, fun.(value))
297295
end
298296
end
299-
300-
def maybe_log_send_result(_send_result, %Event{source: :logger}) do
301-
:ok
302-
end
303-
304-
@spec maybe_log_send_result(
305-
{:error, any()} | {:ok, binary()},
306-
Sentry.CheckIn.t() | Event.t() | list(Event.t())
307-
) ::
308-
:ok | nil
309-
def maybe_log_send_result(send_result, events) do
310-
if is_list(events) && Enum.any?(events, &(&1.source == :logger)) do
311-
:ok
312-
else
313-
message =
314-
case send_result do
315-
{:error, %ClientError{} = error} ->
316-
"Failed to send Sentry event. #{Exception.message(error)}"
317-
318-
{:ok, _} ->
319-
nil
320-
end
321-
322-
if message, do: LoggerUtils.log(fn -> [message] end)
323-
end
324-
end
325297
end

lib/sentry/transport.ex

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@ defmodule Sentry.Transport do
33

44
# This module is exclusively responsible for encoding and POSTing envelopes to Sentry.
55

6-
alias Sentry.ClientError
7-
alias Sentry.Config
8-
alias Sentry.Envelope
6+
alias Sentry.{ClientError, Config, Envelope, LoggerUtils}
97

108
@default_retries [1000, 2000, 4000, 8000]
119
@sentry_version 5
@@ -27,14 +25,19 @@ defmodule Sentry.Transport do
2725
{:ok, envelope_id :: String.t()} | {:error, ClientError.t()}
2826
def encode_and_post_envelope(%Envelope{} = envelope, client, retries \\ @default_retries)
2927
when is_atom(client) and is_list(retries) do
30-
case Envelope.to_binary(envelope) do
31-
{:ok, body} ->
32-
{endpoint, headers} = get_endpoint_and_headers()
33-
post_envelope_with_retries(client, endpoint, headers, body, retries)
28+
result =
29+
case Envelope.to_binary(envelope) do
30+
{:ok, body} ->
31+
{endpoint, headers} = get_endpoint_and_headers()
32+
post_envelope_with_retries(client, endpoint, headers, body, retries)
3433

35-
{:error, reason} ->
36-
{:error, ClientError.new({:invalid_json, reason})}
37-
end
34+
{:error, reason} ->
35+
{:error, ClientError.new({:invalid_json, reason})}
36+
end
37+
38+
_ = maybe_log_send_result(result, envelope.items)
39+
40+
result
3841
end
3942

4043
defp post_envelope_with_retries(client, endpoint, headers, payload, retries_left) do
@@ -130,4 +133,21 @@ defmodule Sentry.Transport do
130133

131134
{dsn.endpoint_uri, auth_headers}
132135
end
136+
137+
defp maybe_log_send_result(send_result, events) do
138+
if Enum.any?(events, &(Map.has_key?(&1, :source) && &1.source == :logger)) do
139+
:ok
140+
else
141+
message =
142+
case send_result do
143+
{:error, %ClientError{} = error} ->
144+
"Failed to send Sentry event. #{Exception.message(error)}"
145+
146+
{:ok, _} ->
147+
nil
148+
end
149+
150+
if message, do: LoggerUtils.log(fn -> [message] end)
151+
end
152+
end
133153
end

lib/sentry/transport/sender.ex

Lines changed: 5 additions & 5 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, Transport, Client}
6+
alias Sentry.{Envelope, Event, Transport}
77

88
require Logger
99

@@ -41,10 +41,10 @@ defmodule Sentry.Transport.Sender do
4141

4242
@impl GenServer
4343
def handle_cast({:send, client, %Event{} = event}, %__MODULE__{} = state) do
44-
event
45-
|> Envelope.from_event()
46-
|> Transport.encode_and_post_envelope(client)
47-
|> Client.maybe_log_send_result([event])
44+
_ =
45+
event
46+
|> Envelope.from_event()
47+
|> Transport.encode_and_post_envelope(client)
4848

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

test/sentry/transport_test.exs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ defmodule Sentry.TransportTest do
22
use Sentry.Case, async: false
33

44
import Sentry.TestHelpers
5+
import ExUnit.CaptureLog
56

67
alias Sentry.{ClientError, Envelope, Event, HackneyClient, Transport}
78

@@ -245,6 +246,12 @@ defmodule Sentry.TransportTest do
245246
Transport.encode_and_post_envelope(envelope, HackneyClient, _retries = [])
246247
end)
247248

249+
log =
250+
capture_log(fn ->
251+
Transport.encode_and_post_envelope(envelope, HackneyClient, _retries = [])
252+
end)
253+
254+
assert log =~ "[warning]"
248255
assert_received {:request, ^ref}
249256
end
250257
end

0 commit comments

Comments
 (0)