diff options
Diffstat (limited to 'benchmarks/load_testing')
-rw-r--r-- | benchmarks/load_testing/fetcher.ex | 70 | ||||
-rw-r--r-- | benchmarks/load_testing/generator.ex | 48 |
2 files changed, 93 insertions, 25 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 |