Current section
Files
Jump to
Current section
Files
lib/request.ex
defmodule Blitzy.Request do
alias Blitzy.TasksSupervisor
require Logger
def do_requests(results, n_requests, r_repeats, s_scenario, url, nodes, accumulator) when r_repeats < 1 do
Logger.info "Finished pummelling #{url} with #{s_scenario} scenario and with #{n_requests} workers for #{div(Enum.count(accumulator),n_requests) * Enum.count(nodes)} times over #{Enum.count(nodes)} nodes."
results ++ accumulator
|> Blitzy.Result.parse_results(n_requests)
|> Blitzy.Result.write_results
end
def do_requests(results, n_requests, r_repeats, s_scenario, url, nodes, accumulator) do
accumulator = results ++ accumulator
total_nodes = Enum.count(nodes)
req_per_node = div(n_requests, total_nodes)
nodes
|> Enum.flat_map(fn node ->
1..req_per_node |> Enum.map(fn _ ->
Task.Supervisor.async({TasksSupervisor, node}, Blitzy.Worker, :start, [s_scenario, url])
end)
end)
|> Enum.map(&Task.await(&1, :infinity))
|> do_requests(n_requests, (r_repeats - 1), s_scenario, url, nodes, accumulator)
end
end