Packages
sentry
8.0.0-rc.1
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/http_client.ex
defmodule Sentry.HTTPClient do
@moduledoc """
Specifies the API for using a custom HTTP Client.
"""
@type headers :: [{String.t(), String.t()}]
@callback child_spec() :: :supervisor.child_spec()
@callback post(url :: String.t(), headers, body :: String.t()) ::
{:ok, status :: pos_integer, headers, body :: String.t()}
| {:error, term}
end
defmodule Sentry.HackneyClient do
@behaviour Sentry.HTTPClient
@moduledoc """
The built-in HTTP client.
"""
@hackney_pool_name :sentry_pool
def child_spec do
unless Code.ensure_loaded?(:hackney) do
raise """
cannot start Sentry.HackneyClient because :hackney is not available.
Please make sure to add hackney as a dependency:
{:hackney, "~> 1.8"}
"""
end
Application.ensure_all_started(:hackney)
:hackney_pool.child_spec(
@hackney_pool_name,
timeout: Sentry.Config.hackney_timeout(),
max_connections: Sentry.Config.max_hackney_connections()
)
end
def post(url, headers, body) do
hackney_opts =
Sentry.Config.hackney_opts()
|> Keyword.put_new(:pool, @hackney_pool_name)
with {:ok, status, headers, client} <-
:hackney.request(:post, url, headers, body, hackney_opts),
{:ok, body} <- :hackney.body(client) do
{:ok, status, headers, body}
end
end
end