1 # credo:disable-for-this-file
2 defmodule Mix.Tasks.Pleroma.Diagnostics do
7 require Pleroma.Constants
13 def run(["http", url]) do
20 def run(["home_timeline", nickname]) do
22 user = Repo.get_by!(User, nickname: nickname)
23 Logger.info("Home timeline query #{user.nickname}")
27 |> User.followed_hashtags()
32 |> Map.put(:type, ["Create", "Announce"])
33 |> Map.put(:blocking_user, user)
34 |> Map.put(:muting_user, user)
35 |> Map.put(:reply_filtering_user, user)
36 |> Map.put(:announce_filtering_user, user)
37 |> Map.put(:user, user)
38 |> Map.put(:followed_hashtags, followed_hashtags)
41 list_memberships = Pleroma.List.memberships(user)
42 recipients = [user.ap_id | User.following(user)]
45 Pleroma.Web.ActivityPub.ActivityPub.fetch_activities_query(
46 recipients ++ list_memberships,
51 Ecto.Adapters.SQL.explain(Repo, :all, query, analyze: true, timeout: :infinity)
55 def run(["user_timeline", nickname, reading_nickname]) do
57 user = Repo.get_by!(User, nickname: nickname)
58 reading_user = Repo.get_by!(User, nickname: reading_nickname)
59 Logger.info("User timeline query #{user.nickname}")
63 |> Map.put(:type, ["Create", "Announce"])
64 |> Map.put(:user, reading_user)
65 |> Map.put(:actor_id, user.ap_id)
66 |> Map.put(:pinned_object_ids, Map.keys(user.pinned_objects))
68 list_memberships = Pleroma.List.memberships(user)
72 godmode: params[:godmode],
73 reading_user: reading_user
75 |> Pleroma.Web.ActivityPub.ActivityPub.user_activities_recipients()
78 (recipients ++ list_memberships)
79 |> Pleroma.Web.ActivityPub.ActivityPub.fetch_activities_query(params)
82 Ecto.Adapters.SQL.explain(Repo, :all, query, analyze: true, timeout: :infinity)
86 def run(["notifications", nickname]) do
88 user = Repo.get_by!(User, nickname: nickname)
89 account_ap_id = user.ap_id
90 options = %{account_ap_id: user.ap_id}
94 |> Pleroma.Notification.for_user_query(options)
95 |> where([n, a], a.actor == ^account_ap_id)
98 Ecto.Adapters.SQL.explain(Repo, :all, query, analyze: true, timeout: :infinity)
102 def run(["known_network", nickname]) do
104 user = Repo.get_by!(User, nickname: nickname)
108 |> Map.put(:type, ["Create"])
109 |> Map.put(:local_only, false)
110 |> Map.put(:blocking_user, user)
111 |> Map.put(:muting_user, user)
112 |> Map.put(:reply_filtering_user, user)
113 # Restricts unfederated content to authenticated users
114 |> Map.put(:includes_local_public, not is_nil(user))
115 |> Map.put(:restrict_unlisted, true)
118 Pleroma.Web.ActivityPub.ActivityPub.fetch_activities_query(
119 [Pleroma.Constants.as_public()],
124 Ecto.Adapters.SQL.explain(Repo, :all, query, analyze: true, timeout: :infinity)