mirror of
https://git.pleroma.social/pleroma/pleroma.git
synced 2024-12-24 00:50:29 +00:00
260 lines
7.9 KiB
Elixir
260 lines
7.9 KiB
Elixir
defmodule Pleroma.LoadTesting.Fetcher do
|
|
use Pleroma.LoadTesting.Helper
|
|
|
|
def fetch_user(user) do
|
|
Benchee.run(%{
|
|
"By id" => fn -> Repo.get_by(User, id: user.id) end,
|
|
"By ap_id" => fn -> Repo.get_by(User, ap_id: user.ap_id) end,
|
|
"By email" => fn -> Repo.get_by(User, email: user.email) end,
|
|
"By nickname" => fn -> Repo.get_by(User, nickname: user.nickname) end
|
|
})
|
|
end
|
|
|
|
def query_timelines(user) do
|
|
home_timeline_params = %{
|
|
"count" => 20,
|
|
"with_muted" => true,
|
|
"type" => ["Create", "Announce"],
|
|
"blocking_user" => user,
|
|
"muting_user" => user,
|
|
"user" => user
|
|
}
|
|
|
|
mastodon_public_timeline_params = %{
|
|
"count" => 20,
|
|
"local_only" => true,
|
|
"only_media" => "false",
|
|
"type" => ["Create", "Announce"],
|
|
"with_muted" => "true",
|
|
"blocking_user" => user,
|
|
"muting_user" => user
|
|
}
|
|
|
|
mastodon_federated_timeline_params = %{
|
|
"count" => 20,
|
|
"only_media" => "false",
|
|
"type" => ["Create", "Announce"],
|
|
"with_muted" => "true",
|
|
"blocking_user" => user,
|
|
"muting_user" => user
|
|
}
|
|
|
|
following = User.following(user)
|
|
|
|
Benchee.run(%{
|
|
"User home timeline" => fn ->
|
|
Pleroma.Web.ActivityPub.ActivityPub.fetch_activities(
|
|
following,
|
|
home_timeline_params
|
|
)
|
|
end,
|
|
"User mastodon public timeline" => fn ->
|
|
Pleroma.Web.ActivityPub.ActivityPub.fetch_public_activities(
|
|
mastodon_public_timeline_params
|
|
)
|
|
end,
|
|
"User mastodon federated public timeline" => fn ->
|
|
Pleroma.Web.ActivityPub.ActivityPub.fetch_public_activities(
|
|
mastodon_federated_timeline_params
|
|
)
|
|
end
|
|
})
|
|
|
|
home_activities =
|
|
Pleroma.Web.ActivityPub.ActivityPub.fetch_activities(
|
|
following,
|
|
home_timeline_params
|
|
)
|
|
|
|
public_activities =
|
|
Pleroma.Web.ActivityPub.ActivityPub.fetch_public_activities(mastodon_public_timeline_params)
|
|
|
|
public_federated_activities =
|
|
Pleroma.Web.ActivityPub.ActivityPub.fetch_public_activities(
|
|
mastodon_federated_timeline_params
|
|
)
|
|
|
|
Benchee.run(%{
|
|
"Rendering home timeline" => fn ->
|
|
Pleroma.Web.MastodonAPI.StatusView.render("index.json", %{
|
|
activities: home_activities,
|
|
for: user,
|
|
as: :activity
|
|
})
|
|
end,
|
|
"Rendering public timeline" => fn ->
|
|
Pleroma.Web.MastodonAPI.StatusView.render("index.json", %{
|
|
activities: public_activities,
|
|
for: user,
|
|
as: :activity
|
|
})
|
|
end,
|
|
"Rendering public federated timeline" => fn ->
|
|
Pleroma.Web.MastodonAPI.StatusView.render("index.json", %{
|
|
activities: public_federated_activities,
|
|
for: user,
|
|
as: :activity
|
|
})
|
|
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
|
|
}
|
|
},
|
|
%{})
|
|
end,
|
|
})
|
|
end
|
|
|
|
def query_notifications(user) do
|
|
without_muted_params = %{"count" => "20", "with_muted" => "false"}
|
|
with_muted_params = %{"count" => "20", "with_muted" => "true"}
|
|
|
|
Benchee.run(%{
|
|
"Notifications without muted" => fn ->
|
|
Pleroma.Web.MastodonAPI.MastodonAPI.get_notifications(user, without_muted_params)
|
|
end,
|
|
"Notifications with muted" => fn ->
|
|
Pleroma.Web.MastodonAPI.MastodonAPI.get_notifications(user, with_muted_params)
|
|
end
|
|
})
|
|
|
|
without_muted_notifications =
|
|
Pleroma.Web.MastodonAPI.MastodonAPI.get_notifications(user, without_muted_params)
|
|
|
|
with_muted_notifications =
|
|
Pleroma.Web.MastodonAPI.MastodonAPI.get_notifications(user, with_muted_params)
|
|
|
|
Benchee.run(%{
|
|
"Render notifications without muted" => fn ->
|
|
Pleroma.Web.MastodonAPI.NotificationView.render("index.json", %{
|
|
notifications: without_muted_notifications,
|
|
for: user
|
|
})
|
|
end,
|
|
"Render notifications with muted" => fn ->
|
|
Pleroma.Web.MastodonAPI.NotificationView.render("index.json", %{
|
|
notifications: with_muted_notifications,
|
|
for: user
|
|
})
|
|
end
|
|
})
|
|
end
|
|
|
|
def query_dms(user) do
|
|
params = %{
|
|
"count" => "20",
|
|
"with_muted" => "true",
|
|
"type" => "Create",
|
|
"blocking_user" => user,
|
|
"user" => user,
|
|
visibility: "direct"
|
|
}
|
|
|
|
Benchee.run(%{
|
|
"Direct messages with muted" => fn ->
|
|
Pleroma.Web.ActivityPub.ActivityPub.fetch_activities_query([user.ap_id], params)
|
|
|> Pleroma.Pagination.fetch_paginated(params)
|
|
end,
|
|
"Direct messages without muted" => fn ->
|
|
Pleroma.Web.ActivityPub.ActivityPub.fetch_activities_query([user.ap_id], params)
|
|
|> Pleroma.Pagination.fetch_paginated(Map.put(params, "with_muted", false))
|
|
end
|
|
})
|
|
|
|
dms_with_muted =
|
|
Pleroma.Web.ActivityPub.ActivityPub.fetch_activities_query([user.ap_id], params)
|
|
|> Pleroma.Pagination.fetch_paginated(params)
|
|
|
|
dms_without_muted =
|
|
Pleroma.Web.ActivityPub.ActivityPub.fetch_activities_query([user.ap_id], params)
|
|
|> Pleroma.Pagination.fetch_paginated(Map.put(params, "with_muted", false))
|
|
|
|
Benchee.run(%{
|
|
"Rendering dms with muted" => fn ->
|
|
Pleroma.Web.MastodonAPI.StatusView.render("index.json", %{
|
|
activities: dms_with_muted,
|
|
for: user,
|
|
as: :activity
|
|
})
|
|
end,
|
|
"Rendering dms without muted" => fn ->
|
|
Pleroma.Web.MastodonAPI.StatusView.render("index.json", %{
|
|
activities: dms_without_muted,
|
|
for: user,
|
|
as: :activity
|
|
})
|
|
end
|
|
})
|
|
end
|
|
|
|
def query_long_thread(user, activity) do
|
|
Benchee.run(%{
|
|
"Fetch main post" => fn ->
|
|
Pleroma.Activity.get_by_id_with_object(activity.id)
|
|
end,
|
|
"Fetch context of main post" => fn ->
|
|
Pleroma.Web.ActivityPub.ActivityPub.fetch_activities_for_context(
|
|
activity.data["context"],
|
|
%{
|
|
"blocking_user" => user,
|
|
"user" => user,
|
|
"exclude_id" => activity.id
|
|
}
|
|
)
|
|
end
|
|
})
|
|
|
|
activity = Pleroma.Activity.get_by_id_with_object(activity.id)
|
|
|
|
context =
|
|
Pleroma.Web.ActivityPub.ActivityPub.fetch_activities_for_context(
|
|
activity.data["context"],
|
|
%{
|
|
"blocking_user" => user,
|
|
"user" => user,
|
|
"exclude_id" => activity.id
|
|
}
|
|
)
|
|
|
|
Benchee.run(%{
|
|
"Render status" => fn ->
|
|
Pleroma.Web.MastodonAPI.StatusView.render("show.json", %{
|
|
activity: activity,
|
|
for: user
|
|
})
|
|
end,
|
|
"Render context" => fn ->
|
|
Pleroma.Web.MastodonAPI.StatusView.render(
|
|
"index.json",
|
|
for: user,
|
|
activities: context,
|
|
as: :activity
|
|
)
|
|
|> Enum.reverse()
|
|
end
|
|
})
|
|
end
|
|
end
|