Packages
tai
0.0.73
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/fleets/services/load.ex
defmodule Tai.Fleets.Services.Load do
alias Tai.Fleets
@type result :: {:ok, {loaded_fleets :: non_neg_integer, loaded_advisors :: non_neg_integer}}
@spec execute(map) :: result
def execute(config) do
loaded = config
|> build_configs()
|> load_configs()
{:ok, loaded}
end
defp build_configs(config) do
config
|> Enum.reduce(
[],
fn {fleet_id, attrs}, acc ->
fleet_config = build_fleet_config(fleet_id, attrs)
advisor_configs = build_advisor_configs(fleet_config)
[{fleet_config, advisor_configs} | acc]
end
)
end
defp load_configs(fleet_and_advisor_configs) do
fleet_and_advisor_configs
|> Enum.reduce(
{0, 0},
fn {fleet_config, advisor_configs}, {loaded_fleets, loaded_advisors} ->
{:ok, _} = Fleets.FleetConfigStore.put(fleet_config)
new_advisors = advisor_configs
|> Enum.reduce(
0,
fn advisor_config, acc ->
{:ok, _} = Fleets.AdvisorConfigStore.put(advisor_config)
acc+1
end
)
{loaded_fleets+1, loaded_advisors+new_advisors}
end
)
end
defp build_fleet_config(fleet_id, attrs) do
factory = fetch!(attrs, :factory)
advisor = fetch!(attrs, :advisor)
quotes = fetch!(attrs, :quotes)
start_on_boot = get(attrs, :start_on_boot)
restart = get(attrs, :restart)
shutdown = get(attrs, :shutdown)
config = get(attrs, :config)
%Fleets.FleetConfig{
id: fleet_id,
factory: factory,
advisor: advisor,
quotes: quotes,
start_on_boot: start_on_boot,
restart: restart,
shutdown: shutdown,
config: config
}
end
defp build_advisor_configs(fleet_config) do
fleet_config.factory.advisor_configs(fleet_config)
end
defp fetch!(attrs, key), do: Map.fetch!(attrs, key)
defp get(attrs, :start_on_boot = key), do: Map.get(attrs, key, false)
defp get(attrs, :restart = key), do: Map.get(attrs, key, :temporary)
defp get(attrs, :shutdown = key), do: Map.get(attrs, key, 5_000)
defp get(attrs, :config = key) do
case Map.get(attrs, key, %{}) do
{s, c} -> struct!(s, c |> Tai.Advisors.Groups.RichConfig.parse())
c -> c |> Tai.Advisors.Groups.RichConfig.parse()
end
end
end