defmodule Chaperon.Worker do
@moduledoc """
Wraps supervised `Task`s running `Chaperon.Scenario` sessions that run on any
of the nodes in the cluster.
"""
require Logger
def start(amount, scenario_mod, config)
when is_integer(amount) and amount > 0 do
Chaperon.Worker.Supervisor.start_workers(
nodes(),
amount,
scenario_mod,
config,
timeout(config)
)
end
def start(scenario_mod, config) do
Chaperon.Worker.Supervisor.start_worker(
random_node(),
scenario_mod,
config,
timeout(config)
)
end
def start_nested(scenario_mod, session, config) do
Chaperon.Worker.Supervisor.start_nested_worker(
random_node(),
scenario_mod,
session,
config,
timeout(config)
)
end
def await(worker = %Task{}, timeout \\ 5000) do
Task.await(worker, timeout)
end
def random_node do
nodes()
|> Enum.shuffle()
|> List.first()
end
def nodes do
[Node.self() | Node.list()]
end
def timeout(config), do: config[:scenario_timeout] || :infinity
end