Packages
timber
2.1.2
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/utils/plug.ex
defmodule Timber.Utils.Plug do
@moduledoc false
@doc """
Fetches the request ID from the connection using the given header name
The request ID may be added to the connection in a number of ways which
complicates how we retrieve it. It is usually set by calling the
Plug.RequestId module on the connection which sets a request ID only
if one hasn't already been set. If the request ID is set by a service
prior to Plug, it will be present as a request header. If Plug.RequestId
generates a request ID, that request ID is only present in the response
headers. The request headers should always take precedent in
this function, though.
This function will return either a single element list containing a two-element
tuple of the form:
{"x-request-id", "myrequestid91391"}
or an empty list. This normalizes the expectation of the header name for
future processing.
Note: Plug.RequestId will change an existing request ID if
it doesn't think the request ID is valid. See
[request_id.ex](https://github.com/elixir-lang/plug/blob/v1.2.2/lib/plug/request_id.ex#L62).
"""
@spec get_request_id(Plug.Conn.t, String.t) :: [{String.t, String.t}] | []
def get_request_id(conn, header_name) do
case Plug.Conn.get_req_header(conn, header_name) do
[] -> Plug.Conn.get_resp_header(conn, header_name)
values -> values
end
|> handle_request_id()
end
# Helper function to take the result of the header retrieval function
# and change it to the desired response format for get_request_id/2
@spec handle_request_id([] | [String.t]) :: [{String.t, String.t}] | []
defp handle_request_id([]) do
[]
end
defp handle_request_id([request_id | _]) do
[{"x-request-id", request_id}]
end
@spec get_client_ip(Plug.Conn.t) :: String.t | nil
def get_client_ip(%{remote_ip: nil}) do
nil
end
def get_client_ip(%{remote_ip: remote_ip}) do
remote_ip
|> :inet.ntoa()
|> List.to_string()
end
end