Packages
timber
2.4.4
3.1.2
3.1.1
3.1.0
3.0.0
3.0.0-alpha.3
3.0.0-alpha.2
3.0.0-alpha.1
2.8.4
2.8.3
2.8.2
2.8.1
2.8.0
2.7.0
2.6.1
2.6.0
2.5.6
2.5.5
2.5.4
2.5.3
2.5.2
2.5.1
2.5.0
2.4.5
2.4.4
2.4.3
2.4.2
2.4.1
2.4.0
2.3.4
2.3.3
2.3.1
2.3.0
2.2.1
2.2.0
2.1.8
2.1.7
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.2
2.0.1
2.0.0
2.0.0-rc7
2.0.0-rc6
2.0.0-rc5
2.0.0-rc4
2.0.0-rc3
2.0.0-rc2
2.0.0-rc1
1.1.18
1.1.17
1.1.16
1.1.15
1.1.14
1.1.13
1.1.12
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.16
1.0.15
1.0.14
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
🌲 Great Elixir Logging Made Easy. Official Timber.io Integration.
Current section
Files
Jump to
Current section
Files
lib/timber/http_clients/hackney.ex
defmodule Timber.HTTPClients.Hackney do
@moduledoc """
An efficient HTTP client that leverages hackney, keep alive connections, and connection
pools to communicate with the Timber API.
## Configuration
```elixir
config :timber, :hackney_client,
request_options: [
connect_timeout: 5_000, # 5 seconds, timeout to connect
recv_timeout: 20_000 # 20 seconds, timeout to receive a response
]
```
* `:request_options` - Passed to `:hackney.request(method, url, headers, body, request_options)`.
"""
alias Timber.HTTPClient
@behaviour HTTPClient
@default_request_options [
connect_timeout: 5_000, # 5 seconds, timeout to connect
recv_timeout: 10_000 # 10 seconds, timeout to receive a response
]
def start() do
{:ok, _} = Application.ensure_all_started(:hackney)
:ok
end
@doc """
Issues a HTTP request via hackney.
"""
def async_request(method, url, headers, body) do
req_headers = Enum.map(headers, &(&1))
req_opts =
get_request_options()
|> Keyword.merge([async: true])
:hackney.request(method, url, req_headers, body, req_opts)
end
@doc """
Issues a HTTP request via hackney.
"""
def request(method, url, headers, body) do
req_headers = Enum.map(headers, &(&1))
req_opts =
get_request_options()
|> Keyword.merge([with_body: true])
:hackney.request(method, url, req_headers, body, req_opts)
end
#
# Config
#
@spec config :: Keyword.t
defp config, do: Application.get_env(:timber, :hackney_client, [])
@spec get_request_options() :: Keyword.t
defp get_request_options(), do: Keyword.get(config(), :request_options, @default_request_options)
end