logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

timelines.ex (1774B)


  1. defmodule Mix.Tasks.Pleroma.Benchmarks.Timelines do
  2. use Mix.Task
  3. import Pleroma.LoadTesting.Helper, only: [clean_tables: 0]
  4. alias Pleroma.Web.CommonAPI
  5. alias Plug.Conn
  6. def run(_args) do
  7. Mix.Pleroma.start_pleroma()
  8. # Cleaning tables
  9. clean_tables()
  10. [{:ok, user} | users] = Pleroma.LoadTesting.Users.generate_users(1000)
  11. # Let the user make 100 posts
  12. 1..100
  13. |> Enum.each(fn i -> CommonAPI.post(user, %{status: to_string(i)}) end)
  14. # Let 10 random users post
  15. posts =
  16. users
  17. |> Enum.take_random(10)
  18. |> Enum.map(fn {:ok, random_user} ->
  19. {:ok, activity} = CommonAPI.post(random_user, %{status: "."})
  20. activity
  21. end)
  22. # let our user repeat them
  23. posts
  24. |> Enum.each(fn activity ->
  25. CommonAPI.repeat(activity.id, user)
  26. end)
  27. Benchee.run(
  28. %{
  29. "user timeline, no followers" => fn reading_user ->
  30. conn =
  31. Phoenix.ConnTest.build_conn()
  32. |> Conn.assign(:user, reading_user)
  33. |> Conn.assign(:skip_link_headers, true)
  34. Pleroma.Web.MastodonAPI.AccountController.statuses(conn, %{id: user.id})
  35. end
  36. },
  37. inputs: %{"user" => user, "no user" => nil},
  38. time: 60
  39. )
  40. users
  41. |> Enum.each(fn {:ok, follower} -> Pleroma.User.follow(follower, user) end)
  42. Benchee.run(
  43. %{
  44. "user timeline, all following" => fn reading_user ->
  45. conn =
  46. Phoenix.ConnTest.build_conn()
  47. |> Conn.assign(:user, reading_user)
  48. |> Conn.assign(:skip_link_headers, true)
  49. Pleroma.Web.MastodonAPI.AccountController.statuses(conn, %{id: user.id})
  50. end
  51. },
  52. inputs: %{"user" => user, "no user" => nil},
  53. time: 60
  54. )
  55. end
  56. end