Packages
altworx_runbox
17.0.1
25.0.0
24.0.0
23.1.0
23.0.0
22.2.0
22.1.0
22.0.0
21.2.0
21.1.2
21.1.1
21.1.0
21.0.0
20.0.0
19.0.0
18.0.0
17.2.0
17.1.0
17.0.1
17.0.0
16.2.0
16.1.0
16.0.0
15.0.0
14.1.0
14.0.1
14.0.0
13.0.3
13.0.2
13.0.1
13.0.0
12.1.0
12.0.0
11.0.1
11.0.0
10.0.0
9.0.0
8.0.0
7.0.1
7.0.0
6.0.0
5.0.0
4.0.0
3.0.0
2.1.0
2.0.0
1.4.1
1.4.0
1.3.0
1.2.0
1.1.0
1.0.0
0.1.3
0.1.2
0.1.1
0.1.0
Runbox is a library for running Altworx scenarios.
Current section
Files
Jump to
Current section
Files
lib/runbox/runtime/component_network.ex
defmodule Runbox.Runtime.ComponentNetwork do
@moduledoc group: :internal
@moduledoc """
Component network builds and validates run component dependency network.
To build this network, module uses dependencies defined by the scenario.
"""
alias Runbox.Scenario.Type
alias Runbox.ScenarioTemplate
@type t :: any()
@type component :: any()
@callback create([ScenarioTemplate.t()], Keyword.t()) :: {:ok, t} | {:error, term}
@callback convert_to_network([ScenarioTemplate.t()]) :: t
@callback input_topics(t) :: [String.t()]
@doc """
Main function. Given list of template modules,
expands them into components network with input streams, timezips etc...
## Options
* `:direct_ticking` - if true (default), creates network using direct ticking
"""
@spec create(Type.t(), [ScenarioTemplate.t()], Keyword.t()) :: {:ok, t} | {:error, term}
def create(scenario_type, scenario_templates, opts \\ []) do
get_impl(scenario_type).create(scenario_templates, opts)
end
@doc """
Creates base network with only template nodes
"""
@spec convert_to_network(Type.t(), [ScenarioTemplate.t()]) :: t
def convert_to_network(scenario_type, scenario_templates) do
get_impl(scenario_type).convert_to_network(scenario_templates)
end
@doc """
Return all input topic names that are being subscribed to in component network.
"""
@spec input_topics(Type.t(), t) :: [String.t()]
def input_topics(scenario_type, component_network) do
get_impl(scenario_type).input_topics(component_network)
end
@stage Type.stage()
@simple Type.simple()
@spec topology_sort(Type.t(), t) :: [component]
def topology_sort(@stage, network) do
Runbox.Runtime.Stage.ComponentNetwork.topology_sort(network)
end
defp get_impl(@stage), do: Runbox.Runtime.Stage.ComponentNetwork
defp get_impl(@simple), do: Runbox.Runtime.Simple.ComponentNetwork
end