Packages
tai
0.0.47
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/application.ex
defmodule Tai.Application do
use Application
def start(_type, _args) do
Confex.resolve_env!(:tai)
config = Tai.Config.parse()
settings = Tai.Settings.from_config(config)
children = [
{Tai.PubSub, config.pub_sub_registry_partitions},
{Tai.Events, config.event_registry_partitions},
Tai.EventsLogger,
{Tai.Settings, settings},
Tai.Trading.PositionStore,
Tai.Trading.OrderStore,
Tai.Markets.QuoteStore,
Tai.Venues.ProductStore,
Tai.Venues.FeeStore,
Tai.Venues.AccountStore,
Tai.Venues.StreamsSupervisor,
{Task.Supervisor, name: Tai.TaskSupervisor, restart: :transient},
Tai.Advisors.Store,
Tai.Advisors.Supervisor
]
{:ok, pid} = Supervisor.start_link(children, strategy: :one_for_one, name: Tai.Supervisor)
config
|> boot_venues!()
|> hydrate_advisors!()
|> boot_advisors!()
{:ok, pid}
end
defp boot_venues!(config) do
config
|> Tai.Venues.Config.parse()
|> Enum.map(fn {_, venue} ->
task =
Task.Supervisor.async(
Tai.TaskSupervisor,
Tai.Venues.Boot,
:run,
[venue],
timeout: venue.timeout
)
{task, venue}
end)
|> Enum.map(fn {task, venue} -> Task.await(task, venue.timeout) end)
|> Enum.each(&config.venue_boot_handler.parse_response/1)
{:ok, config}
end
defp hydrate_advisors!({:ok, config}) do
config
|> Tai.Advisors.Specs.from_config()
|> Enum.map(&Tai.Advisors.Instance.from_spec/1)
|> Enum.map(&Tai.Advisors.Store.upsert/1)
end
defp boot_advisors!(upsert_results) do
upsert_results
|> Enum.map(fn {:ok, instance} -> instance end)
|> Enum.filter(fn instance -> instance.start_on_boot end)
|> Tai.Advisors.Instances.start()
end
end