mirror of https://akkoma.dev/AkkomaGang/akkoma
134 lines
3.6 KiB
Elixir
134 lines
3.6 KiB
Elixir
# credo:disable-for-this-file
|
|
defmodule Mix.Tasks.Pleroma.Diagnostics do
|
|
alias Pleroma.Repo
|
|
alias Pleroma.User
|
|
|
|
require Pleroma.Constants
|
|
|
|
import Mix.Pleroma
|
|
import Ecto.Query
|
|
use Mix.Task
|
|
|
|
def run(["http", url]) do
|
|
start_pleroma()
|
|
|
|
Pleroma.HTTP.get(url)
|
|
|> shell_info()
|
|
end
|
|
|
|
def run(["fetch_object", url]) do
|
|
start_pleroma()
|
|
|
|
Pleroma.Object.Fetcher.fetch_object_from_id(url)
|
|
|> IO.inspect()
|
|
end
|
|
|
|
def run(["home_timeline", nickname]) do
|
|
start_pleroma()
|
|
user = Repo.get_by!(User, nickname: nickname)
|
|
shell_info("Home timeline query #{user.nickname}")
|
|
|
|
followed_hashtags =
|
|
user
|
|
|> User.followed_hashtags()
|
|
|> Enum.map(& &1.id)
|
|
|
|
params =
|
|
%{limit: 20}
|
|
|> Map.put(:type, ["Create", "Announce"])
|
|
|> Map.put(:blocking_user, user)
|
|
|> Map.put(:muting_user, user)
|
|
|> Map.put(:reply_filtering_user, user)
|
|
|> Map.put(:announce_filtering_user, user)
|
|
|> Map.put(:user, user)
|
|
|> Map.put(:followed_hashtags, followed_hashtags)
|
|
|> Map.delete(:local)
|
|
|
|
list_memberships = Pleroma.List.memberships(user)
|
|
recipients = [user.ap_id | User.following(user)]
|
|
|
|
query =
|
|
Pleroma.Web.ActivityPub.ActivityPub.fetch_activities_query(
|
|
recipients ++ list_memberships,
|
|
params
|
|
)
|
|
|> limit(20)
|
|
|
|
Ecto.Adapters.SQL.explain(Repo, :all, query, analyze: true, timeout: :infinity)
|
|
|> shell_info()
|
|
end
|
|
|
|
def run(["user_timeline", nickname, reading_nickname]) do
|
|
start_pleroma()
|
|
user = Repo.get_by!(User, nickname: nickname)
|
|
reading_user = Repo.get_by!(User, nickname: reading_nickname)
|
|
shell_info("User timeline query #{user.nickname}")
|
|
|
|
params =
|
|
%{limit: 20}
|
|
|> Map.put(:type, ["Create", "Announce"])
|
|
|> Map.put(:user, reading_user)
|
|
|> Map.put(:actor_id, user.ap_id)
|
|
|> Map.put(:pinned_object_ids, Map.keys(user.pinned_objects))
|
|
|
|
list_memberships = Pleroma.List.memberships(user)
|
|
|
|
recipients =
|
|
%{
|
|
godmode: params[:godmode],
|
|
reading_user: reading_user
|
|
}
|
|
|> Pleroma.Web.ActivityPub.ActivityPub.user_activities_recipients()
|
|
|
|
query =
|
|
(recipients ++ list_memberships)
|
|
|> Pleroma.Web.ActivityPub.ActivityPub.fetch_activities_query(params)
|
|
|> limit(20)
|
|
|
|
Ecto.Adapters.SQL.explain(Repo, :all, query, analyze: true, timeout: :infinity)
|
|
|> shell_info()
|
|
end
|
|
|
|
def run(["notifications", nickname]) do
|
|
start_pleroma()
|
|
user = Repo.get_by!(User, nickname: nickname)
|
|
account_ap_id = user.ap_id
|
|
options = %{account_ap_id: user.ap_id}
|
|
|
|
query =
|
|
user
|
|
|> Pleroma.Notification.for_user_query(options)
|
|
|> where([n, a], a.actor == ^account_ap_id)
|
|
|> limit(20)
|
|
|
|
Ecto.Adapters.SQL.explain(Repo, :all, query, analyze: true, timeout: :infinity)
|
|
|> shell_info()
|
|
end
|
|
|
|
def run(["known_network", nickname]) do
|
|
start_pleroma()
|
|
user = Repo.get_by!(User, nickname: nickname)
|
|
|
|
params =
|
|
%{}
|
|
|> Map.put(:type, ["Create"])
|
|
|> Map.put(:local_only, false)
|
|
|> Map.put(:blocking_user, user)
|
|
|> Map.put(:muting_user, user)
|
|
|> Map.put(:reply_filtering_user, user)
|
|
# Restricts unfederated content to authenticated users
|
|
|> Map.put(:includes_local_public, not is_nil(user))
|
|
|> Map.put(:restrict_unlisted, true)
|
|
|
|
query =
|
|
Pleroma.Web.ActivityPub.ActivityPub.fetch_activities_query(
|
|
[Pleroma.Constants.as_public()],
|
|
params
|
|
)
|
|
|> limit(20)
|
|
|
|
Ecto.Adapters.SQL.explain(Repo, :all, query, analyze: true, timeout: :infinity)
|
|
|> shell_info()
|
|
end
|
|
end
|