Pārlūkot izejas kodu

Benchmarks: Add timeline benchmark

feature/add-subject-to-text-search
lain pirms 4 gadiem
vecāks
revīzija
3bd2829e5c
3 mainītis faili ar 84 papildinājumiem un 2 dzēšanām
  1. +2
    -1
      benchmarks/load_testing/generator.ex
  2. +76
    -0
      benchmarks/mix/tasks/pleroma/benchmarks/timelines.ex
  3. +6
    -1
      lib/pleroma/web/controller_helper.ex

+ 2
- 1
benchmarks/load_testing/generator.ex Parādīt failu

@@ -22,9 +22,10 @@ defmodule Pleroma.LoadTesting.Generator do

def generate_users(opts) do
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")
users
end

defp do_generate_users(opts) do


+ 76
- 0
benchmarks/mix/tasks/pleroma/benchmarks/timelines.ex Parādīt failu

@@ -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

+ 6
- 1
lib/pleroma/web/controller_helper.ex Parādīt failu

@@ -34,7 +34,12 @@ defmodule Pleroma.Web.ControllerHelper do

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
%{id: max_id} ->
params =


Notiek ielāde…
Atcelt
Saglabāt