summaryrefslogtreecommitdiff
path: root/benchmarks/load_testing/activities.ex
diff options
context:
space:
mode:
authorAlexander Strizhakov <alex.strizhakov@gmail.com>2020-02-18 12:19:10 +0300
committerAlexander Strizhakov <alex.strizhakov@gmail.com>2020-03-30 11:42:25 +0300
commit1f29ecdcd7ecdc4ad8d6bc8fc4c34efbc9b7fe1d (patch)
treefbf9755e8d2a060205ef21511f8d1dc9fe4694b3 /benchmarks/load_testing/activities.ex
parenteb9744cadea7191b088ddaadfbd5fa4d4fd45090 (diff)
downloadpleroma-1f29ecdcd7ecdc4ad8d6bc8fc4c34efbc9b7fe1d.tar.gz
pleroma-1f29ecdcd7ecdc4ad8d6bc8fc4c34efbc9b7fe1d.zip
sync with develop
Diffstat (limited to 'benchmarks/load_testing/activities.ex')
-rw-r--r--benchmarks/load_testing/activities.ex42
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",