diff --git a/lib/sentry/client.ex b/lib/sentry/client.ex index 1e78c65c..c3fa1efe 100644 --- a/lib/sentry/client.ex +++ b/lib/sentry/client.ex @@ -107,11 +107,8 @@ defmodule Sentry.Client do {:ok, id} -> {:ok, id} - {:error, {status, headers, body}} -> - {:error, ClientError.server_error(status, headers, body)} - - {:error, reason} -> - {:error, ClientError.new(reason)} + {:error, %ClientError{} = error} -> + {:error, error} end end diff --git a/lib/sentry/opentelemetry/span_record.ex b/lib/sentry/opentelemetry/span_record.ex index dc5c4cd4..d314e3b4 100644 --- a/lib/sentry/opentelemetry/span_record.ex +++ b/lib/sentry/opentelemetry/span_record.ex @@ -1,5 +1,6 @@ defmodule Sentry.Opentelemetry.SpanRecord do require Record + require OpenTelemetry @fields Record.extract(:span, from_lib: "opentelemetry/include/otel_span.hrl") Record.defrecordp(:span, @fields) @@ -54,7 +55,7 @@ defmodule Sentry.Opentelemetry.SpanRecord do defp cast_timestamp(nil), do: nil defp cast_timestamp(timestamp) do - nano_timestamp = :opentelemetry.timestamp_to_nano(timestamp) + nano_timestamp = OpenTelemetry.timestamp_to_nano(timestamp) {:ok, datetime} = DateTime.from_unix(div(nano_timestamp, 1_000_000), :millisecond) DateTime.to_iso8601(datetime) diff --git a/lib/sentry/transport/sender.ex b/lib/sentry/transport/sender.ex index 923a7a63..72ce407f 100644 --- a/lib/sentry/transport/sender.ex +++ b/lib/sentry/transport/sender.ex @@ -3,7 +3,7 @@ defmodule Sentry.Transport.Sender do use GenServer - alias Sentry.{Envelope, Event, Transport, Transaction, LoggerUtils} + alias Sentry.{Envelope, Event, Transport, Transaction} require Logger @@ -61,64 +61,14 @@ defmodule Sentry.Transport.Sender do @impl GenServer def handle_cast({:send, client, %Transaction{} = transaction}, %__MODULE__{} = state) do - envelope = Envelope.from_transaction(transaction) - - envelope - |> Transport.encode_and_post_envelope(client) - |> maybe_log_send_result([transaction]) + _ = + transaction + |> Envelope.from_transaction() + |> Transport.encode_and_post_envelope(client) - # We sent an event, so we can decrease the number of queued events. - Transport.SenderPool.decrease_queued_events_counter() + # We sent a transaction, so we can decrease the number of queued transactions. + Transport.SenderPool.decrease_queued_transactions_counter() {:noreply, state} end - - ## Helpers - - defp maybe_log_send_result(send_result, events) do - if Enum.any?(events, fn item -> - case item do - %Event{} -> item.source == :logger - _ -> false - end - end) do - :ok - else - message = - case send_result do - {:error, {:invalid_json, error}} -> - "Unable to encode JSON Sentry error - #{inspect(error)}" - - {:error, {:request_failure, last_error}} -> - case last_error do - {kind, data, stacktrace} - when kind in [:exit, :throw, :error] and is_list(stacktrace) -> - Exception.format(kind, data, stacktrace) - - _other -> - "Error in HTTP Request to Sentry - #{inspect(last_error)}" - end - - {:error, http_reponse} -> - {status, headers, _body} = http_reponse - - error_header = - :proplists.get_value("X-Sentry-Error", headers, nil) || - :proplists.get_value("x-sentry-error", headers, nil) || "" - - if error_header != "" do - "Received #{status} from Sentry server: #{error_header}" - else - "Received #{status} from Sentry server" - end - - result -> - result - end - - if message do - LoggerUtils.log(fn -> ["Failed to send Sentry event. ", message] end) - end - end - end end diff --git a/lib/sentry/transport/sender_pool.ex b/lib/sentry/transport/sender_pool.ex index b247441a..e620cb6c 100644 --- a/lib/sentry/transport/sender_pool.ex +++ b/lib/sentry/transport/sender_pool.ex @@ -58,6 +58,12 @@ defmodule Sentry.Transport.SenderPool do :counters.sub(counter, 1, 1) end + @spec decrease_queued_transactions_counter() :: :ok + def decrease_queued_transactions_counter do + counter = :persistent_term.get(@queued_transactions_key) + :counters.sub(counter, 1, 1) + end + @spec get_queued_events_counter() :: non_neg_integer() def get_queued_events_counter do counter = :persistent_term.get(@queued_events_key)