Packages
tai
0.0.75
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/advisors.ex
defmodule Tai.Advisors do
alias __MODULE__
@type start_result :: {started :: non_neg_integer, already_started :: non_neg_integer}
@type stop_result :: {stopped :: non_neg_integer, already_stopped :: non_neg_integer}
@spec search_instances(term) :: Advisors.Queries.SearchInstances.result()
def search_instances(query) do
Advisors.Queries.SearchInstances.call(query)
end
@spec search_configs(term) :: Advisors.Queries.SearchConfigs.result()
def search_configs(options) do
Advisors.Queries.SearchConfigs.call(options)
end
@spec start(term) :: start_result
def start(options) do
options
|> search_configs()
|> Enum.map(&Advisors.Supervisor.start_advisor/1)
|> Enum.reduce(
{0, 0},
fn
{:error, {:already_started, _}}, {s, a} -> {s, a+1}
_, {s, a} -> {s+1, a}
end
)
end
@spec stop(term) :: stop_result
def stop(options) do
options
|> search_instances()
|> Enum.reduce(
{0, 0},
fn
%_{pid: nil}, {stopped, already_stopped} ->
{stopped, already_stopped+1}
i, {stopped, already_stopped} ->
:ok = Advisors.Supervisor.terminate_advisor(i.pid)
{stopped+1, already_stopped}
end
)
end
end