Packages
tai
0.0.68
0.0.75
0.0.74
0.0.73
0.0.72
0.0.71
0.0.70
0.0.69
0.0.68
0.0.67
0.0.66
0.0.65
0.0.64
0.0.63
0.0.62
0.0.61
0.0.60
0.0.59
0.0.58
0.0.57
0.0.56
0.0.55
0.0.54
0.0.53
0.0.52
0.0.51
0.0.50
0.0.49
0.0.48
0.0.47
0.0.46
0.0.45
0.0.44
0.0.43
0.0.42
0.0.41
0.0.40
0.0.39
0.0.38
0.0.37
0.0.36
0.0.35
0.0.34
0.0.33
0.0.32
0.0.31
0.0.30
0.0.29
0.0.28
0.0.27
0.0.26
0.0.25
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
A composable, real time, market data and trade execution toolkit
Current section
Files
Jump to
Current section
Files
lib/tai/config.ex
defmodule Tai.Config do
@moduledoc """
Global configuration for a `tai` instance. This module provides a utility
function to hydrate a struct from the OTP `Application` environment.
It can be configured with the following options:
```
# [default: 10_000] [optional] Adapter start timeout in milliseconds
config :tai, adapter_timeout: 60_000
# [default: nil] [optional] Handler to call after all venues & advisors have successfully started on boot
config :tai, after_boot: {Mod, :func_name, []}
# [default: nil] [optional] Handler to call after any venues or advisors have failed to start on boot
config :tai, after_boot_error: {Mod, :func_name, []}
# [default: false] [optional] Flag which enables the forwarding of each order book change set to the system bus
config :tai, broadcast_change_set: true
# [default: 5] [optional] Maximum pool size
config :tai, order_workers: 5
# [default: 2] [optional] Maximum number of workers created if pool is empty
config :tai, order_workers_max_overflow: 2
# [default: false] [optional] Flag which enables the sending of orders to the venue. When this is `false`, it
# acts a safety net by enqueueing and skipping the order transmission to the venue. This is useful in
# development to prevent accidently sending live orders.
config :tai, send_orders: true
# [default: System.schedulers_online] [optional] Number of processes that can forward internal pubsub messages.
# Defaults to the number of CPU's available in the Erlang VM `System.schedulers_online/0`.
config :tai, system_bus_registry_partitions: 2
# [default: %{}] [optional] Map of configured venues. See below for more details.
config :tai, venues: %{}
# [default: %{}] [optional] Map of configured advisor groups. See below for more details.
config :tai, advisor_groups: %{}
```
"""
@type handler :: module
@type func_name :: atom
@type boot_args :: term
@type t :: %Tai.Config{
adapter_timeout: pos_integer,
advisor_groups: map,
after_boot: {handler, func_name} | {handler, func_name, boot_args} | nil,
after_boot_error: {handler, func_name} | {handler, func_name, boot_args} | nil,
broadcast_change_set: boolean,
logger: module,
order_workers: pos_integer,
order_workers_max_overflow: non_neg_integer,
order_transition_workers: pos_integer,
send_orders: boolean,
system_bus_registry_partitions: pos_integer,
venues: map
}
@enforce_keys ~w[
adapter_timeout
advisor_groups
order_workers
order_workers_max_overflow
send_orders
system_bus_registry_partitions
venues
]a
defstruct ~w[
adapter_timeout
advisor_groups
after_boot
after_boot_error
broadcast_change_set
logger
order_workers
order_workers_max_overflow
order_transition_workers
send_orders
system_bus_registry_partitions
venues
]a
@spec parse() :: t
@spec parse([{Application.key(), Application.value()}]) :: t
def parse(env \\ Application.get_all_env(:tai)) do
%Tai.Config{
adapter_timeout: get(env, :adapter_timeout, 10_000),
advisor_groups: get(env, :advisor_groups, %{}),
after_boot: get(env, :after_boot),
after_boot_error: get(env, :after_boot_error),
broadcast_change_set: !!get(env, :broadcast_change_set),
logger: get(env, :logger),
order_workers: get(env, :order_workers, 5),
order_transition_workers: get(env, :order_transition_workers, 5),
order_workers_max_overflow: get(env, :order_workers_max_overflow, 2),
send_orders: !!get(env, :send_orders),
system_bus_registry_partitions:
get(env, :system_bus_registry_partitions, System.schedulers_online()),
venues: get(env, :venues, %{})
}
end
defp get(env, key, default \\ nil), do: Keyword.get(env, key, default)
end