Current section

Files

Jump to
riemannx lib riemannx settings default.ex
Raw

lib/riemannx/settings/default.ex

defmodule Riemannx.Settings.Default do
@moduledoc """
This module follows the default config format as of 3.0.0.
"""
import Application
alias Riemannx.Metrics.Default
@types [:tls, :tcp, :udp]
# ===========================================================================
# Behaviour
# ===========================================================================
@behaviour Riemannx.Settings
# ===========================================================================
# Types
# ===========================================================================
@type conn_type :: :tcp | :udp | :tls
# ===========================================================================
# API
# ===========================================================================
@spec pool_name(conn_type()) :: atom()
def pool_name(:tcp), do: :riemannx_tcp
def pool_name(:tls), do: :riemannx_tls
def pool_name(:udp), do: :riemannx_udp
@spec pool_size(conn_type()) :: non_neg_integer()
def pool_size(t) when t in @types, do: extract(t, :pool_size, 2)
@spec strategy(conn_type()) :: :fifo | :lifo
def strategy(t) when t in @types, do: extract(t, :strategy, :fifo)
@spec max_overflow(conn_type()) :: non_neg_integer()
def max_overflow(t) when t in @types, do: extract(t, :max_overflow, 2)
@spec type() :: :tcp | :udp | :tls | :combined | :batch
def type, do: get_env(:riemannx, :type, :batch)
@spec module(conn_type() | :combined | :batch) :: module()
def module(t) do
case t do
:tcp -> Riemannx.Connections.TCP
:udp -> Riemannx.Connections.UDP
:tls -> Riemannx.Connections.TLS
:combined -> Riemannx.Connections.Combined
:batch -> Riemannx.Connections.Batch
end
end
@spec batch_type() :: conn_type() | :combined
def batch_type, do: extract_batch(:type, :combined)
@spec batch_module() :: module()
def batch_module, do: batch_type() |> module()
@spec batch_size() :: integer()
def batch_size, do: extract_batch(:size, 100)
@spec batch_interval() :: integer()
def batch_interval, do: interval(extract_batch(:interval, {10, :seconds}))
defp interval({x, :minutes}), do: interval({x * 60, :seconds})
defp interval({x, :seconds}), do: x * 1000
defp interval({x, :milliseconds}), do: x
@spec metrics_module() :: module()
def metrics_module, do: get_env(:riemannx, :metrics_module, Default)
@spec host() :: String.t()
def host, do: get_env(:riemannx, :host, "localhost")
@spec port(:tcp | :udp | :tls) :: :inet.port_number()
def port(t), do: extract(t, :port, 5555)
@spec max_udp_size() :: non_neg_integer()
def max_udp_size, do: extract(:udp, :max_size, 16_384)
@spec retry_count(conn_type()) :: non_neg_integer() | :infinity
def retry_count(t), do: extract(t, :retry_count, 5)
@spec retry_interval(conn_type()) :: non_neg_integer()
def retry_interval(t), do: extract(t, :retry_interval, 5000)
@spec options(conn_type()) :: list()
def options(:tls),
do: extract(:tls, :options, []) ++ [:binary, nodelay: true, packet: 4, active: true]
def options(:tcp),
do: extract(:tcp, :options, []) ++ [:binary, nodelay: true, packet: 4, active: true]
def options(:udp), do: extract(:udp, :options, []) ++ [:binary, sndbuf: max_udp_size()]
@spec events_host() :: binary()
def events_host do
inet_host = inet_host()
event_host = get_env(:riemannx, :event_host, nil)
cond do
inet_host != nil && event_host == nil ->
inet_host
event_host == nil && inet_host == nil ->
{:ok, host} = :inet.gethostname()
host = to_string(host)
put_env(:riemannx, :inet_host, host)
host
true ->
event_host
end
end
@spec priority!(conn_type()) :: Riemannx.Settings.priority() | no_return()
def priority!(t) when t in @types do
case extract(t, :priority, :normal) do
p when p in [:low, :normal, :high] -> p
p when p in [:max] -> raise("You should NOT use the max priority!")
p -> raise("#{inspect(p)} is not a valid priority!")
end
end
@spec micro?() :: boolean()
def micro?, do: get_env(:riemannx, :use_micro, true)
# ===========================================================================
# Private
# ===========================================================================
## It's best nobody knows about this, it's internal.
@spec inet_host() :: binary() | nil
defp inet_host, do: get_env(:riemannx, :inet_host, nil)
defp extract(t, opt, default) do
kw = get_env(:riemannx, t, [])
Keyword.get(kw, opt, default)
end
defp extract_batch(opt, default) do
batch_settings = get_env(:riemannx, :batch_settings, [])
Keyword.get(batch_settings, opt, default)
end
end