diff options
Diffstat (limited to 'benchmarks')
-rw-r--r-- | benchmarks/load_testing/fetcher.ex | 70 | ||||
-rw-r--r-- | benchmarks/load_testing/generator.ex | 48 | ||||
-rw-r--r-- | benchmarks/mix/tasks/pleroma/load_testing.ex | 7 |
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 |