Packages
ex_esdb
0.1.6
0.11.0
0.10.0
0.9.0
0.8.0
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.1
0.5.0
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14-alpha
0.0.13-alpha
0.0.12-alpha
0.0.11-alpha
0.0.10-alpha
0.0.9-alpha
0.0.8-alpha
0.0.6-alpha
0.0.5-alpha
0.0.4-alpha
0.0.3-alpha
0.0.2-alfa
0.0.1-alfa
ExESDB is a reincarnation of rabbitmq/khepri, specialized for use as a BEAM-native event store.
Current section
Files
Jump to
Current section
Files
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