Packages
sentry
10.10.0
13.3.0
13.2.0
13.1.0
13.0.1
13.0.0
12.0.3
12.0.2
12.0.1
12.0.0
11.0.4
11.0.3
11.0.2
11.0.1
11.0.0
10.10.0
10.9.0
10.8.1
10.8.0
10.7.1
10.7.0
10.6.2
10.6.1
10.6.0
10.5.0
10.4.0
10.3.0
10.2.1
10.2.0
10.2.0-rc.2
10.2.0-rc.1
10.1.0
10.0.3
10.0.2
10.0.1
10.0.0
9.1.0
9.0.0
8.1.0
8.0.6
8.0.5
8.0.4
8.0.3
8.0.2
8.0.1
8.0.0
8.0.0-rc.2
8.0.0-rc.1
8.0.0-rc.0
retired
7.2.5
7.2.4
7.2.3
7.2.2
7.2.1
7.2.0
7.1.0
7.0.6
7.0.5
7.0.4
7.0.3
7.0.2
7.0.1
7.0.0
6.4.2
6.4.1
6.4.0
6.3.0
6.2.1
6.2.0
6.1.0
6.0.5
6.0.4
6.0.3
6.0.2
6.0.1
6.0.0
5.0.1
5.0.0
4.0.3
4.0.2
4.0.1
4.0.0
3.0.0
2.2.0
2.1.0
2.0.2
2.0.1
2.0.0
1.1.2
1.1.1
1.1.0
1.0.0
0.3.2
0.3.1
0.3.0
0.2.0
0.1.3
0.1.2
0.1.1
0.1.0
The Official Elixir client for Sentry
Current section
Files
Jump to
Current section
Files
lib/sentry/transport/sender_pool.ex
defmodule Sentry.Transport.SenderPool do
@moduledoc false
use Supervisor
@queued_events_key {__MODULE__, :queued_events}
@queued_transactions_key {__MODULE__, :queued_transactions}
@spec start_link(keyword()) :: Supervisor.on_start()
def start_link([] = _opts) do
Supervisor.start_link(__MODULE__, [])
end
@impl true
def init([]) do
queued_events_counter = :counters.new(1, [])
:persistent_term.put(@queued_events_key, queued_events_counter)
queued_transactions_counter = :counters.new(1, [])
:persistent_term.put(@queued_transactions_key, queued_transactions_counter)
children =
for index <- 1..pool_size() do
Supervisor.child_spec({Sentry.Transport.Sender, index: index},
id: {Sentry.Transport.Sender, index}
)
end
Supervisor.init(children, strategy: :one_for_one)
end
@spec pool_size() :: pos_integer()
def pool_size do
if pool_size = :persistent_term.get({:sentry, :sender_pool_size}, nil) do
pool_size
else
value = max(System.schedulers_online(), 8)
:persistent_term.put({:sentry, :sender_pool_size}, value)
value
end
end
@spec increase_queued_events_counter() :: :ok
def increase_queued_events_counter do
counter = :persistent_term.get(@queued_events_key)
:counters.add(counter, 1, 1)
end
@spec increase_queued_transactions_counter() :: :ok
def increase_queued_transactions_counter do
counter = :persistent_term.get(@queued_transactions_key)
:counters.add(counter, 1, 1)
end
@spec decrease_queued_events_counter() :: :ok
def decrease_queued_events_counter do
counter = :persistent_term.get(@queued_events_key)
: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)
:counters.get(counter, 1)
end
end