Current section

Files

Jump to
ex_esdb lib options.ex
Raw

lib/options.ex

defmodule ExESDB.Options do
@moduledoc """
This module contains the options helper functions for ExESDB
"""
alias ExESDB.EnVars, as: EnVars
@data_dir EnVars.data_dir()
@store_id EnVars.store_id()
@timeout EnVars.timeout()
@db_type EnVars.db_type()
@pub_sub EnVars.pub_sub()
@writer_idle_ms EnVars.writer_idle_ms()
@reader_idle_ms EnVars.reader_idle_ms()
@store_description EnVars.store_description()
@store_tags EnVars.store_tags()
def sys_env(key), do: System.get_env(key)
def app_env, do: Application.get_env(:ex_esdb, :khepri, [])
def app_env(key, default), do: Keyword.get(app_env(), key, default)
def topologies, do: Application.get_env(:libcluster, :topologies)
def data_dir do
case sys_env(@data_dir) do
nil -> app_env(:data_dir, "/data")
data_dir -> data_dir
end
end
def store_id do
case sys_env(@store_id) do
nil -> app_env(:store_id, :undefined)
store_id -> to_unique_atom(store_id)
end
end
def timeout do
case sys_env(@timeout) do
nil -> app_env(:timeout, 10_000)
timeout -> String.to_integer(timeout)
end
end
def db_type do
case sys_env(@db_type) do
nil -> app_env(:db_type, :single)
db_type -> String.to_atom(db_type)
end
end
def pub_sub do
case sys_env(@pub_sub) do
nil -> app_env(:pub_sub, :ex_esdb_pubsub)
pub_sub -> to_unique_atom(pub_sub)
end
end
def reader_idle_ms do
case sys_env(@reader_idle_ms) do
nil -> app_env(:reader_idle_ms, 10_000)
reader_idle_ms -> String.to_integer(reader_idle_ms)
end
end
def writer_idle_ms do
case sys_env(@writer_idle_ms) do
nil -> app_env(:writer_idle_ms, 10_000)
writer_idle_ms -> String.to_integer(writer_idle_ms)
end
end
def store_description do
case sys_env(@store_description) do
nil -> app_env(:store_description, "undefined!")
store_description -> store_description
end
end
def store_tags do
case sys_env(@store_tags) do
nil ->
app_env(:store_tags, [])
tags_string ->
tags_string
|> String.split(",")
|> Enum.map(&String.trim/1)
|> Enum.reject(&(&1 == ""))
end
end
defp to_unique_atom(candidate) do
try do
String.to_existing_atom(candidate)
rescue
_ -> String.to_atom(candidate)
end
end
end