forked from YokaiRick/akkoma
Merge branch 'benchmark_timeline' into 'develop'
Benchmarks: Add timeline benchmark See merge request pleroma/pleroma!2325
This commit is contained in:
commit
af820f8cf1
3 changed files with 85 additions and 3 deletions
|
@ -22,9 +22,10 @@ def generate_like_activities(user, posts) do
|
||||||
|
|
||||||
def generate_users(opts) do
|
def generate_users(opts) do
|
||||||
IO.puts("Starting generating #{opts[:users_max]} users...")
|
IO.puts("Starting generating #{opts[:users_max]} users...")
|
||||||
{time, _} = :timer.tc(fn -> do_generate_users(opts) end)
|
{time, users} = :timer.tc(fn -> do_generate_users(opts) end)
|
||||||
|
|
||||||
IO.puts("Inserting users take #{to_sec(time)} sec.\n")
|
IO.puts("Inserting users took #{to_sec(time)} sec.\n")
|
||||||
|
users
|
||||||
end
|
end
|
||||||
|
|
||||||
defp do_generate_users(opts) do
|
defp do_generate_users(opts) do
|
||||||
|
|
76
benchmarks/mix/tasks/pleroma/benchmarks/timelines.ex
Normal file
76
benchmarks/mix/tasks/pleroma/benchmarks/timelines.ex
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
defmodule Mix.Tasks.Pleroma.Benchmarks.Timelines do
|
||||||
|
use Mix.Task
|
||||||
|
alias Pleroma.Repo
|
||||||
|
alias Pleroma.LoadTesting.Generator
|
||||||
|
|
||||||
|
alias Pleroma.Web.CommonAPI
|
||||||
|
|
||||||
|
def run(_args) do
|
||||||
|
Mix.Pleroma.start_pleroma()
|
||||||
|
|
||||||
|
# Cleaning tables
|
||||||
|
clean_tables()
|
||||||
|
|
||||||
|
[{:ok, user} | users] = Generator.generate_users(users_max: 1000)
|
||||||
|
|
||||||
|
# Let the user make 100 posts
|
||||||
|
|
||||||
|
1..100
|
||||||
|
|> Enum.each(fn i -> CommonAPI.post(user, %{"status" => to_string(i)}) end)
|
||||||
|
|
||||||
|
# Let 10 random users post
|
||||||
|
posts =
|
||||||
|
users
|
||||||
|
|> Enum.take_random(10)
|
||||||
|
|> Enum.map(fn {:ok, random_user} ->
|
||||||
|
{:ok, activity} = CommonAPI.post(random_user, %{"status" => "."})
|
||||||
|
activity
|
||||||
|
end)
|
||||||
|
|
||||||
|
# let our user repeat them
|
||||||
|
posts
|
||||||
|
|> Enum.each(fn activity ->
|
||||||
|
CommonAPI.repeat(activity.id, user)
|
||||||
|
end)
|
||||||
|
|
||||||
|
Benchee.run(
|
||||||
|
%{
|
||||||
|
"user timeline, no followers" => fn reading_user ->
|
||||||
|
conn =
|
||||||
|
Phoenix.ConnTest.build_conn()
|
||||||
|
|> Plug.Conn.assign(:user, reading_user)
|
||||||
|
|> Plug.Conn.assign(:skip_link_headers, true)
|
||||||
|
|
||||||
|
Pleroma.Web.MastodonAPI.AccountController.statuses(conn, %{"id" => user.id})
|
||||||
|
end
|
||||||
|
},
|
||||||
|
inputs: %{"user" => user, "no user" => nil},
|
||||||
|
time: 60
|
||||||
|
)
|
||||||
|
|
||||||
|
users
|
||||||
|
|> Enum.each(fn {:ok, follower} -> Pleroma.User.follow(follower, user) end)
|
||||||
|
|
||||||
|
Benchee.run(
|
||||||
|
%{
|
||||||
|
"user timeline, all following" => fn reading_user ->
|
||||||
|
conn =
|
||||||
|
Phoenix.ConnTest.build_conn()
|
||||||
|
|> Plug.Conn.assign(:user, reading_user)
|
||||||
|
|> Plug.Conn.assign(:skip_link_headers, true)
|
||||||
|
|
||||||
|
Pleroma.Web.MastodonAPI.AccountController.statuses(conn, %{"id" => user.id})
|
||||||
|
end
|
||||||
|
},
|
||||||
|
inputs: %{"user" => user, "no user" => nil},
|
||||||
|
time: 60
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
defp clean_tables do
|
||||||
|
IO.puts("Deleting old data...\n")
|
||||||
|
Ecto.Adapters.SQL.query!(Repo, "TRUNCATE users CASCADE;")
|
||||||
|
Ecto.Adapters.SQL.query!(Repo, "TRUNCATE activities CASCADE;")
|
||||||
|
Ecto.Adapters.SQL.query!(Repo, "TRUNCATE objects CASCADE;")
|
||||||
|
end
|
||||||
|
end
|
|
@ -34,7 +34,12 @@ defp param_to_integer(val, default) when is_binary(val) do
|
||||||
|
|
||||||
defp param_to_integer(_, default), do: default
|
defp param_to_integer(_, default), do: default
|
||||||
|
|
||||||
def add_link_headers(conn, activities, extra_params \\ %{}) do
|
def add_link_headers(conn, activities, extra_params \\ %{})
|
||||||
|
|
||||||
|
def add_link_headers(%{assigns: %{skip_link_headers: true}} = conn, _activities, _extra_params),
|
||||||
|
do: conn
|
||||||
|
|
||||||
|
def add_link_headers(conn, activities, extra_params) do
|
||||||
case List.last(activities) do
|
case List.last(activities) do
|
||||||
%{id: max_id} ->
|
%{id: max_id} ->
|
||||||
params =
|
params =
|
||||||
|
|
Loading…
Reference in a new issue