Packages
extreme
1.1.1
1.1.4
1.1.3
1.1.2
1.1.1
1.1.1-rc01
1.1.0
1.1.0-rc9
1.1.0-rc8
1.1.0-rc7
1.1.0-rc6
1.1.0-rc5
1.1.0-rc4
1.1.0-rc3
1.1.0-rc2
1.1.0-rc1
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.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.0
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.2
0.9.1
0.9.0
0.8.1
0.8.0
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
Elixir TCP client for EventStore.
Current section
Files
Jump to
Current section
Files
lib/extreme/configuration.ex
defmodule Extreme.Configuration do
@moduledoc """
Set of functions for retrieving configuration value with correct type
"""
alias Extreme.{Tools, ClusterConnection}
def get_node(configuration) do
configuration
|> _get_db_type
|> _get_node(configuration)
end
@doc """
Returns credentials part of EventStore request based on `:username` and `:password`
fields in `configuration`. In any of those is not specified raises exception.
"""
def prepare_credentials(configuration) do
user = Keyword.fetch!(configuration, :username)
pass = Keyword.fetch!(configuration, :password)
user_len = byte_size(user)
pass_len = byte_size(pass)
<<user_len::size(8)>> <> user <> <<pass_len::size(8)>> <> pass
end
@doc """
Returns `:connection_name` from `configuration` as binary.
If one is not specified defaults to "Extreme".
"""
def get_connection_name(configuration) do
configuration
|> Keyword.get(:connection_name, "Extreme")
|> to_string()
end
# Returns `:db_type` value from `configuration` as `atom`.
# If one is not specified, defaults to `:node`.
defp _get_db_type(configuration) do
configuration
|> Keyword.get(:db_type, :node)
|> Tools.cast_to_atom()
end
defp _get_node(:node, configuration),
do: {:ok, _get_host(configuration), _get_port(configuration)}
defp _get_node(:cluster, configuration) do
gossip_timeout = Keyword.get(configuration, :gossip_timeout, 1_000)
mode = Keyword.get(configuration, :mode, :write)
configuration
|> Keyword.fetch!(:nodes)
|> ClusterConnection.gossip_with(gossip_timeout, mode)
end
defp _get_node(:cluster_dns, configuration) do
{:ok, ips} =
configuration
|> _get_host
|> :inet.getaddrs(:inet, 1_000)
gossip_port =
configuration
|> Keyword.get(:port, 2113)
|> Tools.cast_to_integer()
gossip_timeout =
configuration
|> Keyword.get(:gossip_timeout, 1_000)
|> Tools.cast_to_integer()
mode = Keyword.get(configuration, :mode, :write)
ips
|> Enum.map(fn ip ->
%{host: to_string(:inet.ntoa(ip)), port: gossip_port}
end)
|> ClusterConnection.gossip_with(gossip_timeout, mode)
end
# Returns `:host` value from `configuration` as charlist.
# If one is not specified raises exception.
defp _get_host(configuration) do
configuration
|> Keyword.fetch!(:host)
|> String.to_charlist()
end
# Returns `:port` value from `configuration` as `integer`.
# If one is not specified raises exception.
defp _get_port(configuration) do
configuration
|> Keyword.fetch!(:port)
|> Tools.cast_to_integer()
end
end