Packages
sentry
10.7.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/hackney_client.ex
defmodule Sentry.HackneyClient do
@behaviour Sentry.HTTPClient
@moduledoc """
The built-in HTTP client.
This client implements the `Sentry.HTTPClient` behaviour.
It's based on the [hackney](https://github.com/benoitc/hackney) Erlang HTTP client,
which is an *optional dependency* of this library. If you wish to use another
HTTP client, you'll have to implement your own `Sentry.HTTPClient`. See the
documentation for `Sentry.HTTPClient` for more information.
Sentry starts its own hackney pool called `:sentry_pool`. If you need to set other
[hackney configuration options](https://github.com/benoitc/hackney/blob/master/doc/hackney.md#request5)
for things such as proxies, using your own pool, or response timeouts, the `:hackney_opts`
configuration is passed directly to hackney for each request. See the configuration
documentation in the `Sentry` module.
"""
@hackney_pool_name :sentry_pool
@impl true
def child_spec do
if Code.ensure_loaded?(:hackney) and Code.ensure_loaded?(:hackney_pool) do
case Application.ensure_all_started(:hackney) do
{:ok, _apps} -> :ok
{:error, reason} -> raise "failed to start the :hackney application: #{inspect(reason)}"
end
:hackney_pool.child_spec(
@hackney_pool_name,
timeout: Sentry.Config.hackney_timeout(),
max_connections: Sentry.Config.max_hackney_connections()
)
else
raise """
cannot start the :sentry application because the HTTP client is set to \
Sentry.HackneyClient (which is the default), but the Hackney library is not loaded. \
Add :hackney to your dependencies to fix this.
"""
end
end
@impl true
def post(url, headers, body) do
hackney_opts =
Sentry.Config.hackney_opts()
|> Keyword.put_new(:pool, @hackney_pool_name)
case :hackney.request(:post, url, headers, body, [:with_body] ++ hackney_opts) do
{:ok, _status, _headers, _body} = result -> result
{:error, _reason} = error -> error
end
end
end