pleroma/benchmarks/mix/tasks/pleroma/benchmarks/tags.ex

115 lines
2.7 KiB
Elixir
Raw Permalink Normal View History

2020-01-14 17:24:26 +01:00
defmodule Mix.Tasks.Pleroma.Benchmarks.Tags do
use Mix.Task
2020-02-18 10:19:10 +01:00
import Pleroma.LoadTesting.Helper, only: [clean_tables: 0]
2020-01-14 17:24:26 +01:00
import Ecto.Query
2020-02-18 10:19:10 +01:00
alias Pleroma.Repo
2020-01-14 17:24:26 +01:00
def run(_args) do
Mix.Pleroma.start_pleroma()
activities_count = Repo.aggregate(from(a in Pleroma.Activity), :count, :id)
if activities_count == 0 do
IO.puts("Did not find any activities, cleaning and generating")
clean_tables()
2020-02-18 10:19:10 +01:00
Pleroma.LoadTesting.Users.generate_users(10)
Pleroma.LoadTesting.Activities.generate_tagged_activities()
2020-01-14 17:24:26 +01:00
else
IO.puts("Found #{activities_count} activities, won't generate new ones")
end
tags = Enum.map(0..20, fn i -> {"For #tag_#{i}", "tag_#{i}"} end)
Enum.each(tags, fn {_, tag} ->
query =
from(o in Pleroma.Object,
where: fragment("(?)->'tag' \\? (?)", o.data, ^tag)
)
count = Repo.aggregate(query, :count, :id)
IO.puts("Database contains #{count} posts tagged with #{tag}")
end)
user = Repo.all(Pleroma.User) |> List.first()
2020-01-20 12:19:15 +01:00
Benchee.run(
%{
"Hashtag fetching, any" => fn tags ->
2020-05-20 16:45:06 +02:00
hashtag_fetching(
2020-01-20 12:19:15 +01:00
%{
"any" => tags
},
user,
false
)
end,
# Will always return zero results because no overlapping hashtags are generated.
"Hashtag fetching, all" => fn tags ->
2020-05-20 16:45:06 +02:00
hashtag_fetching(
2020-01-20 12:19:15 +01:00
%{
"all" => tags
},
user,
false
)
end
},
inputs:
tags
|> Enum.map(fn {_, v} -> v end)
|> Enum.chunk_every(2)
|> Enum.map(fn tags -> {"For #{inspect(tags)}", tags} end),
time: 5
)
2020-01-14 17:24:26 +01:00
Benchee.run(
%{
"Hashtag fetching" => fn tag ->
2020-05-20 16:45:06 +02:00
hashtag_fetching(
2020-01-14 17:24:26 +01:00
%{
"tag" => tag
},
user,
false
)
end
},
inputs: tags,
time: 5
)
end
2020-05-20 16:45:06 +02:00
defp hashtag_fetching(params, user, local_only) do
tags =
[params["tag"], params["any"]]
|> List.flatten()
|> Enum.uniq()
|> Enum.filter(& &1)
|> Enum.map(&String.downcase(&1))
tag_all =
params
|> Map.get("all", [])
|> Enum.map(&String.downcase(&1))
tag_reject =
params
|> Map.get("none", [])
|> Enum.map(&String.downcase(&1))
_activities =
%{
type: "Create",
local_only: local_only,
blocking_user: user,
muting_user: user,
user: user,
tag: tags,
tag_all: tag_all,
tag_reject: tag_reject,
}
2020-05-20 16:45:06 +02:00
|> Pleroma.Web.ActivityPub.ActivityPub.fetch_public_activities()
end
2020-01-14 17:24:26 +01:00
end