Packages
altworx_runbox
1.4.0
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/run_node.ex
defmodule Runbox.RunNode do
@moduledoc """
Module contains common functions called on run slave node.
"""
alias Runbox.RunContext
alias Runbox.RunStartContext
alias Runbox.Scenario
@doc """
Starts supervisor for run.
All components of run running on slave node will run under this supervisor.
OneForAll strategy with 0 max restart stops supervisor if any component crashes.
Because run manager process running on master is linked with this supervisor,
it also crashes (and it what we want).
"""
@spec start_run_sup(String.t()) :: Supervisor.on_start_child()
def start_run_sup(run_id) do
children = []
opts = [strategy: :one_for_all, max_restarts: 0]
spec = %{
id: run_id,
start: {Supervisor, :start_link, [children, opts]},
restart: :temporary,
type: :supervisor
}
Supervisor.start_child(Runbox.SlaveSup, spec)
end
@doc """
Starts run component under run scenario.
"""
@spec start_run_component(Scenario.component_def(), RunContext.t(), RunStartContext.t()) ::
Supervisor.on_start_child()
def start_run_component(%{id: id, mod: mod, fun: fun, args: args}, runbox_ctx, start_ctx) do
child_spec = %{
id: id,
type: :worker,
start: {mod, fun, [args, runbox_ctx, start_ctx]},
restart: :transient
}
Supervisor.start_child(runbox_ctx.sup_pid, child_spec)
end
end