Current section
Files
Jump to
Current section
Files
lib/marvin.ex
defmodule Marvin do
alias Marvin.Runner
alias Marvin.Config
alias Marvin.Reporter
alias Marvin.HttpClient
@spec run(Config.config()) :: :ok
def run(config) do
setup_program(config.scenarios)
start_time = start_program()
countdown(config.duration)
stop_time = stop_program()
print_result(start_time, stop_time)
end
@spec setup_program([Config.scenario()]) :: [any()]
def setup_program(scenarios) do
Supervisor.start_link(
[
{Runner, []},
{Reporter, []},
HttpClient.child_spec()
],
strategy: :one_for_one
)
Runner.setup_workers(scenarios)
end
@spec start_program :: float()
def start_program() do
Runner.run_workers()
:erlang.system_time() / 1000
end
@spec countdown(Config.duration()) :: :ok
def countdown(duration) do
:timer.sleep(duration * 1000)
end
@spec stop_program :: float()
def stop_program() do
Runner.stop()
:erlang.system_time() / 1000
end
@spec print_result(float(), float()) :: :ok
def print_result(start_time, stop_time) do
Reporter.print_result(start_time, stop_time)
end
end