diff options
| author | Maksim Pechnikov <parallel588@gmail.com> | 2020-01-27 15:20:47 +0300 | 
|---|---|---|
| committer | Maksim Pechnikov <parallel588@gmail.com> | 2020-01-27 15:20:47 +0300 | 
| commit | e442ea5722404ca551135b6f4767c016952bbda3 (patch) | |
| tree | 91bb371d96fbc8b46d59c378f6dd690ba30f3da3 /benchmarks/load_testing | |
| parent | 6fbafb1cdcba3dc2a7e8b9718e295c9811a726d9 (diff) | |
| parent | 0b582d415ba5215495047ddae1cb4e4fc1e016e6 (diff) | |
| download | pleroma-e442ea5722404ca551135b6f4767c016952bbda3.tar.gz pleroma-e442ea5722404ca551135b6f4767c016952bbda3.zip | |
Merge branch 'develop' into issue/1276
Diffstat (limited to 'benchmarks/load_testing')
| -rw-r--r-- | benchmarks/load_testing/generator.ex | 44 | 
1 files changed, 43 insertions, 1 deletions
| diff --git a/benchmarks/load_testing/generator.ex b/benchmarks/load_testing/generator.ex index a957e0ffb..3f88fefd7 100644 --- a/benchmarks/load_testing/generator.ex +++ b/benchmarks/load_testing/generator.ex @@ -9,7 +9,7 @@ defmodule Pleroma.LoadTesting.Generator do      {time, _} =        :timer.tc(fn ->          Task.async_stream( -           Enum.take_random(posts, count_likes), +          Enum.take_random(posts, count_likes),            fn post -> {:ok, _, _} = CommonAPI.favorite(post.id, user) end,            max_concurrency: 10,            timeout: 30_000 @@ -142,6 +142,48 @@ defmodule Pleroma.LoadTesting.Generator do      CommonAPI.post(Enum.random(users), post)    end +  def generate_power_intervals(opts \\ []) do +    count = Keyword.get(opts, :count, 20) +    power = Keyword.get(opts, :power, 2) +    IO.puts("Generating #{count} intervals for a power #{power} series...") +    counts = Enum.map(1..count, fn n -> :math.pow(n, power) end) +    sum = Enum.sum(counts) + +    densities = +      Enum.map(counts, fn c -> +        c / sum +      end) + +    densities +    |> Enum.reduce(0, fn density, acc -> +      if acc == 0 do +        [{0, density}] +      else +        [{_, lower} | _] = acc +        [{lower, lower + density} | acc] +      end +    end) +    |> Enum.reverse() +  end + +  def generate_tagged_activities(opts \\ []) do +    tag_count = Keyword.get(opts, :tag_count, 20) +    users = Keyword.get(opts, :users, Repo.all(User)) +    activity_count = Keyword.get(opts, :count, 200_000) + +    intervals = generate_power_intervals(count: tag_count) + +    IO.puts( +      "Generating #{activity_count} activities using #{tag_count} different tags of format `tag_n`, starting at tag_0" +    ) + +    Enum.each(1..activity_count, fn _ -> +      random = :rand.uniform() +      i = Enum.find_index(intervals, fn {lower, upper} -> lower <= random && upper > random end) +      CommonAPI.post(Enum.random(users), %{"status" => "a post with the tag #tag_#{i}"}) +    end) +  end +    defp do_generate_activity_with_mention(user, users) do      mentions_cnt = Enum.random([2, 3, 4, 5])      with_user = Enum.random([true, false]) | 
