logo

pleroma

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

load_testing.ex (2384B)


  1. defmodule Mix.Tasks.Pleroma.LoadTesting do
  2. use Mix.Task
  3. import Ecto.Query
  4. import Pleroma.LoadTesting.Helper, only: [clean_tables: 0]
  5. alias Pleroma.Repo
  6. alias Pleroma.User
  7. @shortdoc "Factory for generation data"
  8. @moduledoc """
  9. Generates data like:
  10. - local/remote users
  11. - local/remote activities with differrent visibility:
  12. - simple activiities
  13. - with emoji
  14. - with mentions
  15. - hellthreads
  16. - with attachments
  17. - with tags
  18. - likes
  19. - reblogs
  20. - simple threads
  21. - long threads
  22. ## Generate data
  23. MIX_ENV=benchmark mix pleroma.load_testing --users 20000 --friends 1000 --iterations 170 --friends_used 20 --non_friends_used 20
  24. MIX_ENV=benchmark mix pleroma.load_testing -u 20000 -f 1000 -i 170 -fu 20 -nfu 20
  25. Options:
  26. - `--users NUMBER` - number of users to generate. Defaults to: 20000. Alias: `-u`
  27. - `--friends NUMBER` - number of friends for main user. Defaults to: 1000. Alias: `-f`
  28. - `--iterations NUMBER` - number of iterations to generate activities. For each iteration in database is inserted about 120+ activities with different visibility, actors and types.Defaults to: 170. Alias: `-i`
  29. - `--friends_used NUMBER` - number of main user friends used in activity generation. Defaults to: 20. Alias: `-fu`
  30. - `--non_friends_used NUMBER` - number of non friends used in activity generation. Defaults to: 20. Alias: `-nfu`
  31. """
  32. @aliases [u: :users, f: :friends, i: :iterations, fu: :friends_used, nfu: :non_friends_used]
  33. @switches [
  34. users: :integer,
  35. friends: :integer,
  36. iterations: :integer,
  37. friends_used: :integer,
  38. non_friends_used: :integer
  39. ]
  40. def run(args) do
  41. Logger.configure(level: :error)
  42. Mix.Pleroma.start_pleroma()
  43. clean_tables()
  44. {opts, _} = OptionParser.parse!(args, strict: @switches, aliases: @aliases)
  45. user = Pleroma.LoadTesting.Users.generate(opts)
  46. Pleroma.LoadTesting.Activities.generate(user, opts)
  47. IO.puts("Users in DB: #{Repo.aggregate(from(u in User), :count, :id)}")
  48. IO.puts("Activities in DB: #{Repo.aggregate(from(a in Pleroma.Activity), :count, :id)}")
  49. IO.puts("Objects in DB: #{Repo.aggregate(from(o in Pleroma.Object), :count, :id)}")
  50. IO.puts(
  51. "Notifications in DB: #{Repo.aggregate(from(n in Pleroma.Notification), :count, :id)}"
  52. )
  53. Pleroma.LoadTesting.Fetcher.run_benchmarks(user)
  54. end
  55. end