1 defmodule Mix.Tasks.Pleroma.Benchmarks.Tags do
4 import Pleroma.LoadTesting.Helper, only: [clean_tables: 0]
10 Mix.Pleroma.start_pleroma()
11 activities_count = Repo.aggregate(from(a in Pleroma.Activity), :count, :id)
13 if activities_count == 0 do
14 IO.puts("Did not find any activities, cleaning and generating")
16 Pleroma.LoadTesting.Users.generate_users(10)
17 Pleroma.LoadTesting.Activities.generate_tagged_activities()
19 IO.puts("Found #{activities_count} activities, won't generate new ones")
22 tags = Enum.map(0..20, fn i -> {"For #tag_#{i}", "tag_#{i}"} end)
24 Enum.each(tags, fn {_, tag} ->
26 from(o in Pleroma.Object,
27 where: fragment("(?)->'tag' \\? (?)", o.data, ^tag)
30 count = Repo.aggregate(query, :count, :id)
31 IO.puts("Database contains #{count} posts tagged with #{tag}")
34 user = Repo.all(Pleroma.User) |> List.first()
38 "Hashtag fetching, any" => fn tags ->
47 # Will always return zero results because no overlapping hashtags are generated.
48 "Hashtag fetching, all" => fn tags ->
60 |> Enum.map(fn {_, v} -> v end)
61 |> Enum.chunk_every(2)
62 |> Enum.map(fn tags -> {"For #{inspect(tags)}", tags} end),
68 "Hashtag fetching" => fn tag ->
83 defp hashtag_fetching(params, user, local_only) do
85 [params["tag"], params["any"]]
89 |> Enum.map(&String.downcase(&1))
94 |> Enum.map(&String.downcase(&1))
98 |> Map.get("none", [])
99 |> Enum.map(&String.downcase(&1))
104 local_only: local_only,
110 tag_reject: tag_reject,
112 |> Pleroma.Web.ActivityPub.ActivityPub.fetch_public_activities()