Skip to content

Commit 6e6d6b5

Browse files
committed
Allow specifying inet_address_family to support inet/inet6/local
1 parent 6f0df1e commit 6e6d6b5

File tree

3 files changed

+35
-17
lines changed

3 files changed

+35
-17
lines changed

lib/telemetry_metrics_statsd.ex

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -527,20 +527,34 @@ defmodule TelemetryMetricsStatsd do
527527
%{state | udp_config: %{udp_config | host: new_address}}
528528
end
529529

530-
defp configure_host_resolution(%{host: host, port: port}) when is_tuple(host) do
531-
%{host: host, port: port}
530+
defp configure_host_resolution(%{
531+
host: host,
532+
port: port,
533+
inet_address_family: inet_address_family
534+
})
535+
when is_tuple(host) do
536+
%{host: host, port: port, inet_address_family: inet_address_family}
532537
end
533538

534-
defp configure_host_resolution(%{host: host, port: port, host_resolution_interval: interval})
539+
defp configure_host_resolution(%{
540+
host: host,
541+
port: port,
542+
inet_address_family: inet_address_family,
543+
host_resolution_interval: interval
544+
})
535545
when is_integer(interval) do
536-
{:ok, hostent(h_addr_list: [ip | _ips])} = :inet.gethostbyname(host)
546+
{:ok, hostent(h_addr_list: [ip | _ips])} = :inet.gethostbyname(host, inet_address_family)
537547
Process.send_after(self(), :resolve_host, interval)
538-
%{host: ip, port: port}
548+
%{host: ip, port: port, inet_address_family: inet_address_family}
539549
end
540550

541-
defp configure_host_resolution(%{host: host, port: port}) do
542-
{:ok, hostent(h_addr_list: [ip | _ips])} = :inet.gethostbyname(host)
543-
%{host: ip, port: port}
551+
defp configure_host_resolution(%{
552+
host: host,
553+
port: port,
554+
inet_address_family: inet_address_family
555+
}) do
556+
{:ok, hostent(h_addr_list: [ip | _ips])} = :inet.gethostbyname(host, inet_address_family)
557+
%{host: ip, port: port, inet_address_family: inet_address_family}
544558
end
545559

546560
defp update_pool(pool_id, new_host, new_port) do

lib/telemetry_metrics_statsd/options.ex

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ defmodule TelemetryMetricsStatsd.Options do
2121
default: 8125,
2222
doc: "Port of the StatsD server."
2323
],
24+
inet_address_family: [
25+
type: {:in, [:inet, :inet6, :local]},
26+
default: :inet,
27+
doc: "The inet address family, as specified by the Erlang `:inet.address_family type()`."
28+
],
2429
socket_path: [
2530
type: {:custom, __MODULE__, :socket_path, []},
2631
doc: "Path to the Unix Domain Socket used for publishing instead of the hostname and port."

lib/telemetry_metrics_statsd/udp.ex

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,21 @@ defmodule TelemetryMetricsStatsd.UDP do
1111

1212
@type config :: %{
1313
:host => :inet.hostname() | :inet.ip_address() | :inet.local_address(),
14-
optional(:port) => :inet.port_number()
14+
optional(:port) => :inet.port_number(),
15+
optional(:inet_address_family) => boolean()
1516
}
1617

1718
@spec open(config()) ::
1819
{:ok, t()} | {:error, reason :: term()}
1920
def open(config) do
20-
opts = [active: false]
21+
opts = [{:active, false}]
2122

2223
opts =
23-
case config.host do
24-
{:local, _} ->
25-
[:local | opts]
26-
27-
_ ->
28-
opts
29-
end
24+
Enum.reduce(config, opts, fn
25+
{:host, {:local, _}}, opts -> [:local | opts]
26+
{:inet_address_family, value}, opts -> [value | opts]
27+
{_key, _value}, opts -> opts
28+
end)
3029

3130
case :gen_udp.open(0, opts) do
3231
{:ok, socket} ->

0 commit comments

Comments
 (0)