Current section
Files
Jump to
Current section
Files
lib/hyparview/config.ex
defmodule Hyparview.Config do
@moduledoc """
Configuration Utils
"""
@c 3
@k 6
@log_total_members 4
@default_active_view_size @log_total_members + @c
@default_passive_view_size @k * (@log_total_members + @c)
@default_shuffle_interval 60 * 1000
@spec contact_nodes() :: MapSet.t(Node.t())
def contact_nodes do
:contact_nodes
|> get_env(Node.list())
|> Enum.filter(&is_not_self?/1)
|> MapSet.new()
end
@spec active_random_walk_length() :: non_neg_integer()
def active_random_walk_length, do: get_env(:active_random_walk_length, 8)
@spec passive_random_walk_length() :: non_neg_integer()
def passive_random_walk_length, do: get_env(:passive_random_walk_length, 5)
@spec join_timeout() :: non_neg_integer()
def join_timeout, do: get_env(:join_timeout, 300)
@spec except_nodes() :: [Node.t()]
def except_nodes, do: get_env(:except_nodes, [])
@spec active_view_size() :: non_neg_integer()
def active_view_size, do: get_env(:active_view_size, @default_active_view_size)
@spec passive_view_size() :: non_neg_integer()
def passive_view_size, do: get_env(:passive_view_size, @default_passive_view_size)
@spec neighbor_interval() :: non_neg_integer()
def neighbor_interval, do: get_env(:neighbor_interval, 10_000)
@spec join_interval() :: non_neg_integer()
def join_interval, do: get_env(:join_interval, 1_000)
@spec shuffle_interval() :: non_neg_integer()
def shuffle_interval, do: get_env(:shuffle_interval, @default_shuffle_interval)
@spec callback_module() :: atom()
def callback_module, do: get_env(:callback_module, Hyparview.DefaultHandler)
# private functions
defp get_env(key, default), do: Application.get_env(:hyparview, key, default)
defp is_not_self?(n), do: Node.self() != n
end