diff options
author | Alexander Strizhakov <alex.strizhakov@gmail.com> | 2020-02-18 12:19:10 +0300 |
---|---|---|
committer | Alexander Strizhakov <alex.strizhakov@gmail.com> | 2020-03-30 11:42:25 +0300 |
commit | 1f29ecdcd7ecdc4ad8d6bc8fc4c34efbc9b7fe1d (patch) | |
tree | fbf9755e8d2a060205ef21511f8d1dc9fe4694b3 /benchmarks/load_testing/activities.ex | |
parent | eb9744cadea7191b088ddaadfbd5fa4d4fd45090 (diff) | |
download | pleroma-1f29ecdcd7ecdc4ad8d6bc8fc4c34efbc9b7fe1d.tar.gz pleroma-1f29ecdcd7ecdc4ad8d6bc8fc4c34efbc9b7fe1d.zip |
sync with develop
Diffstat (limited to 'benchmarks/load_testing/activities.ex')
-rw-r--r-- | benchmarks/load_testing/activities.ex | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/benchmarks/load_testing/activities.ex b/benchmarks/load_testing/activities.ex index db0e5a66f..121d5c500 100644 --- a/benchmarks/load_testing/activities.ex +++ b/benchmarks/load_testing/activities.ex @@ -85,6 +85,48 @@ defmodule Pleroma.LoadTesting.Activities do :ok 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(Pleroma.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 generate_long_thread(visibility, user, friends, non_friends, _opts) do group = if visibility == "public", |