use in timelines benchmark new user generator
authorAlexander Strizhakov <alex.strizhakov@gmail.com>
Mon, 30 Mar 2020 08:59:14 +0000 (11:59 +0300)
committerAlexander Strizhakov <alex.strizhakov@gmail.com>
Mon, 30 Mar 2020 08:59:14 +0000 (11:59 +0300)
benchmarks/load_testing/activities.ex
benchmarks/load_testing/users.ex
benchmarks/mix/tasks/pleroma/benchmarks/timelines.ex

index 24c6b55311f3420ccd866daa00668d756ac1c01c..23ee2b987cd26258b4fa58b59e7493e622965596 100644 (file)
@@ -81,7 +81,7 @@ defmodule Pleroma.LoadTesting.Activities do
         )
       end)
 
-    IO.puts("Generating iterations of activities take #{to_sec(time)} sec.\n")
+    IO.puts("Generating iterations of activities took #{to_sec(time)} sec.\n")
     :ok
   end
 
index b73ac8651017b63224afd483b0e8071cf62358d3..1a8c6e22f5b2a02ff7f0a4eeaaf1242305d786a7 100644 (file)
@@ -33,7 +33,7 @@ defmodule Pleroma.LoadTesting.Users do
   def generate_users(max) do
     IO.puts("Starting generating #{max} users...")
 
-    {time, _} =
+    {time, users} =
       :timer.tc(fn ->
         Task.async_stream(
           1..max,
@@ -41,10 +41,11 @@ defmodule Pleroma.LoadTesting.Users do
           max_concurrency: @max_concurrency,
           timeout: 30_000
         )
-        |> Stream.run()
+        |> Enum.to_list()
       end)
 
-    IO.puts("Generating users take #{to_sec(time)} sec.\n")
+    IO.puts("Generating users took #{to_sec(time)} sec.\n")
+    users
   end
 
   defp generate_user(i) do
@@ -104,7 +105,7 @@ defmodule Pleroma.LoadTesting.Users do
         |> run_stream(main_user)
       end)
 
-    IO.puts("Making friends take #{to_sec(time)} sec.\n")
+    IO.puts("Making friends took #{to_sec(time)} sec.\n")
   end
 
   def make_friends(%User{} = main_user, %User{} = user) do
index dc6f3d3fcc53b4c780b32f6ea978263277f9039c..9b7ac6111fd935fc7cfdf8036dc0263ded2880e5 100644 (file)
@@ -1,9 +1,10 @@
 defmodule Mix.Tasks.Pleroma.Benchmarks.Timelines do
   use Mix.Task
-  alias Pleroma.Repo
-  alias Pleroma.LoadTesting.Generator
+
+  import Pleroma.LoadTesting.Helper, only: [clean_tables: 0]
 
   alias Pleroma.Web.CommonAPI
+  alias Plug.Conn
 
   def run(_args) do
     Mix.Pleroma.start_pleroma()
@@ -11,7 +12,7 @@ defmodule Mix.Tasks.Pleroma.Benchmarks.Timelines do
     # Cleaning tables
     clean_tables()
 
-    [{:ok, user} | users] = Generator.generate_users(users_max: 1000)
+    [{:ok, user} | users] = Pleroma.LoadTesting.Users.generate_users(1000)
 
     # Let the user make 100 posts
 
@@ -38,8 +39,8 @@ defmodule Mix.Tasks.Pleroma.Benchmarks.Timelines do
         "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)
+            |> Conn.assign(:user, reading_user)
+            |> Conn.assign(:skip_link_headers, true)
 
           Pleroma.Web.MastodonAPI.AccountController.statuses(conn, %{"id" => user.id})
         end
@@ -56,8 +57,8 @@ defmodule Mix.Tasks.Pleroma.Benchmarks.Timelines do
         "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)
+            |> Conn.assign(:user, reading_user)
+            |> Conn.assign(:skip_link_headers, true)
 
           Pleroma.Web.MastodonAPI.AccountController.statuses(conn, %{"id" => user.id})
         end
@@ -66,11 +67,4 @@ defmodule Mix.Tasks.Pleroma.Benchmarks.Timelines do
       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