friends: 100
]
- @max_concurrency 30
+ @max_concurrency 10
@spec generate(keyword()) :: User.t()
def generate(opts \\ []) do
make_friends(main_user, opts[:friends])
- Repo.get(User, main_user.id)
+ User.get_by_id(main_user.id)
end
def generate_users(max) do
- IO.puts("Starting generating #{opts[:users]} users...")
+ IO.puts("Starting generating #{max} users...")
- {time, _} =
+ {time, users} =
:timer.tc(fn ->
Task.async_stream(
1..max,
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
name: "Test ใในใ User #{i}",
email: "user#{i}@example.com",
nickname: "nick#{i}",
- password_hash: Comeonin.Pbkdf2.hashpwsalt("test"),
+ password_hash: Pbkdf2.hash_pwd_salt("test"),
bio: "Tester Number #{i}",
local: !remote
}
end
def make_friends(main_user, max) when is_integer(max) do
- IO.puts("Starting making friends for #{opts[:friends]} users...")
+ IO.puts("Starting making friends for #{max} users...")
{time, _} =
:timer.tc(fn ->
|> 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
- defp make_friends(%User{} = main_user, %User{} = user) do
+ def make_friends(%User{} = main_user, %User{} = user) do
{:ok, _} = User.follow(main_user, user)
{:ok, _} = User.follow(user, main_user)
end
)
|> Stream.run()
end
+
+ @spec prepare_users(User.t(), keyword()) :: map()
+ def prepare_users(user, opts) do
+ friends_limit = opts[:friends_used]
+ non_friends_limit = opts[:non_friends_used]
+
+ %{
+ user: user,
+ friends_local: fetch_users(user, friends_limit, :local, true),
+ friends_remote: fetch_users(user, friends_limit, :external, true),
+ non_friends_local: fetch_users(user, non_friends_limit, :local, false),
+ non_friends_remote: fetch_users(user, non_friends_limit, :external, false)
+ }
+ end
+
+ defp fetch_users(user, limit, local, friends?) do
+ user
+ |> get_users(limit: limit, local: local, friends?: friends?)
+ |> Enum.shuffle()
+ end
end