summaryrefslogtreecommitdiff
path: root/benchmarks/load_testing/fetcher.ex
diff options
context:
space:
mode:
authorAlexander Strizhakov <alex.strizhakov@gmail.com>2020-05-20 17:45:06 +0300
committerAlexander Strizhakov <alex.strizhakov@gmail.com>2020-06-01 21:17:32 +0300
commit7e6ec778d965419ed4083428d4d39b2a689f7619 (patch)
tree0db4676482ee411ded02ec298519332f540f4437 /benchmarks/load_testing/fetcher.ex
parentfa37bfff99b3d4277a14345cff4ccbbe93385e04 (diff)
downloadpleroma-7e6ec778d965419ed4083428d4d39b2a689f7619.tar.gz
pleroma-7e6ec778d965419ed4083428d4d39b2a689f7619.zip
exclude replies on blocked domains
Diffstat (limited to 'benchmarks/load_testing/fetcher.ex')
-rw-r--r--benchmarks/load_testing/fetcher.ex71
1 files changed, 71 insertions, 0 deletions
diff --git a/benchmarks/load_testing/fetcher.ex b/benchmarks/load_testing/fetcher.ex
index 0de4924bc..b278faf9f 100644
--- a/benchmarks/load_testing/fetcher.ex
+++ b/benchmarks/load_testing/fetcher.ex
@@ -36,6 +36,7 @@ defmodule Pleroma.LoadTesting.Fetcher do
fetch_home_timeline(user)
fetch_direct_timeline(user)
fetch_public_timeline(user)
+ fetch_public_timeline(user, :with_blocks)
fetch_public_timeline(user, :local)
fetch_public_timeline(user, :tag)
fetch_notifications(user)
@@ -227,6 +228,76 @@ defmodule Pleroma.LoadTesting.Fetcher do
fetch_public_timeline(opts, "public timeline only media")
end
+ # TODO: remove using `:method` after benchmarks
+ defp fetch_public_timeline(user, :with_blocks) do
+ opts = opts_for_public_timeline(user)
+
+ remote_non_friends = Agent.get(:non_friends_remote, & &1)
+
+ Benchee.run(
+ %{
+ "public timeline without blocks" => fn opts ->
+ ActivityPub.fetch_public_activities(opts)
+ end
+ },
+ inputs: %{
+ "old filtering" => Map.delete(opts, :method),
+ "with psql fun" => Map.put(opts, :method, :fun),
+ "with unnest" => Map.put(opts, :method, :unnest)
+ }
+ )
+
+ Enum.each(remote_non_friends, fn non_friend ->
+ {:ok, _} = User.block(user, non_friend)
+ end)
+
+ user = User.get_by_id(user.id)
+
+ opts = Map.put(opts, "blocking_user", user)
+
+ Benchee.run(
+ %{
+ "public timeline with user block" => fn opts ->
+ ActivityPub.fetch_public_activities(opts)
+ end
+ },
+ inputs: %{
+ "old filtering" => Map.delete(opts, :method),
+ "with psql fun" => Map.put(opts, :method, :fun),
+ "with unnest" => Map.put(opts, :method, :unnest)
+ }
+ )
+
+ domains =
+ Enum.reduce(remote_non_friends, [], fn non_friend, domains ->
+ {:ok, _user} = User.unblock(user, non_friend)
+ %{host: host} = URI.parse(non_friend.ap_id)
+ [host | domains]
+ end)
+
+ domains = Enum.uniq(domains)
+
+ Enum.each(domains, fn domain ->
+ {:ok, _} = User.block_domain(user, domain)
+ end)
+
+ user = User.get_by_id(user.id)
+ opts = Map.put(opts, "blocking_user", user)
+
+ Benchee.run(
+ %{
+ "public timeline with domain block" => fn opts ->
+ ActivityPub.fetch_public_activities(opts)
+ end
+ },
+ inputs: %{
+ "old filtering" => Map.delete(opts, :method),
+ "with psql fun" => Map.put(opts, :method, :fun),
+ "with unnest" => Map.put(opts, :method, :unnest)
+ }
+ )
+ end
+
defp fetch_public_timeline(opts, title) when is_binary(title) do
first_page_last = ActivityPub.fetch_public_activities(opts) |> List.last()