aboutsummaryrefslogtreecommitdiff
path: root/benchmarks
diff options
context:
space:
mode:
Diffstat (limited to 'benchmarks')
-rw-r--r--benchmarks/load_testing/fetcher.ex70
-rw-r--r--benchmarks/load_testing/generator.ex48
-rw-r--r--benchmarks/mix/tasks/pleroma/load_testing.ex7
3 files changed, 99 insertions, 26 deletions
diff --git a/benchmarks/load_testing/fetcher.ex b/benchmarks/load_testing/fetcher.ex
index a45a71d4a..1b71db076 100644
--- a/benchmarks/load_testing/fetcher.ex
+++ b/benchmarks/load_testing/fetcher.ex
@@ -98,33 +98,35 @@ defmodule Pleroma.LoadTesting.Fetcher do
end,
"Rendering favorites timeline" => fn ->
conn = Phoenix.ConnTest.build_conn(:get, "http://localhost:4001/api/v1/favourites", nil)
- Pleroma.Web.MastodonAPI.StatusController.favourites(
- %Plug.Conn{conn |
- assigns: %{user: user},
- query_params: %{"limit" => "0"},
- body_params: %{},
- cookies: %{},
- params: %{},
- path_params: %{},
- private: %{
- Pleroma.Web.Router => {[], %{}},
- phoenix_router: Pleroma.Web.Router,
- phoenix_action: :favourites,
- phoenix_controller: Pleroma.Web.MastodonAPI.StatusController,
- phoenix_endpoint: Pleroma.Web.Endpoint,
- phoenix_format: "json",
- phoenix_layout: {Pleroma.Web.LayoutView, "app.html"},
- phoenix_recycled: true,
- phoenix_view: Pleroma.Web.MastodonAPI.StatusView,
- plug_session: %{"user_id" => user.id},
- plug_session_fetch: :done,
- plug_session_info: :write,
- plug_skip_csrf_protection: true
- }
+ Pleroma.Web.MastodonAPI.StatusController.favourites(
+ %Plug.Conn{
+ conn
+ | assigns: %{user: user},
+ query_params: %{"limit" => "0"},
+ body_params: %{},
+ cookies: %{},
+ params: %{},
+ path_params: %{},
+ private: %{
+ Pleroma.Web.Router => {[], %{}},
+ phoenix_router: Pleroma.Web.Router,
+ phoenix_action: :favourites,
+ phoenix_controller: Pleroma.Web.MastodonAPI.StatusController,
+ phoenix_endpoint: Pleroma.Web.Endpoint,
+ phoenix_format: "json",
+ phoenix_layout: {Pleroma.Web.LayoutView, "app.html"},
+ phoenix_recycled: true,
+ phoenix_view: Pleroma.Web.MastodonAPI.StatusView,
+ plug_session: %{"user_id" => user.id},
+ plug_session_fetch: :done,
+ plug_session_info: :write,
+ plug_skip_csrf_protection: true
+ }
},
- %{})
- end,
+ %{}
+ )
+ end
})
end
@@ -257,4 +259,22 @@ defmodule Pleroma.LoadTesting.Fetcher do
end
})
end
+
+ def query_flags_group_reports do
+ statuses = Pleroma.Web.ActivityPub.Utils.get_reported_activities()
+
+ Benchee.run(%{
+ "Old method" => fn ->
+ Pleroma.Web.AdminAPI.ReportView.render(
+ "index_grouped.json",
+ Pleroma.Web.ActivityPub.Utils.get_reports_grouped_by_status(statuses)
+ )
+ end,
+ "New method" => fn ->
+ Pleroma.Web.AdminAPI.ReportView.render("index_grouped_new.json", %{
+ groups: Pleroma.Web.ActivityPub.Utils.get_grouped_reports()
+ })
+ end
+ })
+ end
end
diff --git a/benchmarks/load_testing/generator.ex b/benchmarks/load_testing/generator.ex
index 3f88fefd7..303e2c483 100644
--- a/benchmarks/load_testing/generator.ex
+++ b/benchmarks/load_testing/generator.ex
@@ -1,5 +1,8 @@
defmodule Pleroma.LoadTesting.Generator do
use Pleroma.LoadTesting.Helper
+
+ import Ecto.Query
+
alias Pleroma.Web.CommonAPI
def generate_like_activities(user, posts) do
@@ -406,4 +409,49 @@ defmodule Pleroma.LoadTesting.Generator do
CommonAPI.post(user, post)
end)
end
+
+ def generate_flags(remote_users, users) do
+ IO.puts("Starting generating 100 flag activities...")
+
+ {time, _} =
+ :timer.tc(fn ->
+ do_generate_flags(remote_users, users)
+ end)
+
+ IO.puts("Inserting flag activities take #{to_sec(time)} sec.\n")
+ end
+
+ defp do_generate_flags(remote_users, users) do
+ Task.async_stream(
+ 1..100,
+ fn _ ->
+ do_generate_flag(Enum.random(remote_users), Enum.random(users))
+ end,
+ max_concurrency: 30,
+ timeout: 30_000
+ )
+ |> Stream.run()
+ end
+
+ defp do_generate_flag(actor, user) do
+ limit = Enum.random(1..3)
+
+ activities =
+ from(a in Pleroma.Activity,
+ where: a.local == true,
+ where: a.actor == ^user.ap_id,
+ order_by: fragment("RANDOM()"),
+ limit: ^limit
+ )
+ |> Repo.all()
+
+ Pleroma.Web.ActivityPub.ActivityPub.flag(%{
+ context: Pleroma.Web.ActivityPub.Utils.generate_context_id(),
+ actor: actor,
+ account: user,
+ statuses: activities,
+ content: "Some content",
+ forward: false
+ })
+ end
end
diff --git a/benchmarks/mix/tasks/pleroma/load_testing.ex b/benchmarks/mix/tasks/pleroma/load_testing.ex
index 0a751adac..330be2fd7 100644
--- a/benchmarks/mix/tasks/pleroma/load_testing.ex
+++ b/benchmarks/mix/tasks/pleroma/load_testing.ex
@@ -101,7 +101,8 @@ defmodule Mix.Tasks.Pleroma.LoadTesting do
generate_remote_activities(user, remote_users)
generate_like_activities(
- user, Pleroma.Repo.all(Pleroma.Activity.Queries.by_type("Create"))
+ user,
+ Pleroma.Repo.all(Pleroma.Activity.Queries.by_type("Create"))
)
generate_dms(user, users, opts)
@@ -110,6 +111,8 @@ defmodule Mix.Tasks.Pleroma.LoadTesting do
generate_non_visible_message(user, users)
+ generate_flags(remote_users, users)
+
IO.puts("Users in DB: #{Repo.aggregate(from(u in User), :count, :id)}")
IO.puts("Activities in DB: #{Repo.aggregate(from(a in Pleroma.Activity), :count, :id)}")
@@ -127,6 +130,7 @@ defmodule Mix.Tasks.Pleroma.LoadTesting do
query_long_thread(user, activity)
Pleroma.Config.put([:instance, :skip_thread_containment], false)
query_timelines(user)
+ query_flags_group_reports()
end
defp clean_tables do
@@ -134,5 +138,6 @@ defmodule Mix.Tasks.Pleroma.LoadTesting do
Ecto.Adapters.SQL.query!(Repo, "TRUNCATE users CASCADE;")
Ecto.Adapters.SQL.query!(Repo, "TRUNCATE activities CASCADE;")
Ecto.Adapters.SQL.query!(Repo, "TRUNCATE objects CASCADE;")
+ Ecto.Adapters.SQL.query!(Repo, "TRUNCATE oban_jobs CASCADE;")
end
end