b8d8167bbd4f043281aba03ad92b3fb55baf07be
[akkoma] / lib / mix / tasks / pleroma / diagnostics.ex
1 defmodule Mix.Tasks.Pleroma.Diagnostics do
2 alias Pleroma.Repo
3 alias Pleroma.User
4
5 require Logger
6 require Pleroma.Constants
7
8 import Mix.Pleroma
9 import Ecto.Query
10 use Mix.Task
11
12 def run(["http", url]) do
13 start_pleroma()
14
15 Pleroma.HTTP.get(url)
16 |> IO.inspect()
17 end
18
19 def run(["home_timeline", nickname]) do
20 start_pleroma()
21 user = Repo.get_by!(User, nickname: nickname)
22 Logger.info("Home timeline query #{user.nickname}")
23
24 followed_hashtags =
25 user
26 |> User.followed_hashtags()
27 |> Enum.map(& &1.id)
28
29 params =
30 %{limit: 20}
31 |> Map.put(:type, ["Create", "Announce"])
32 |> Map.put(:blocking_user, user)
33 |> Map.put(:muting_user, user)
34 |> Map.put(:reply_filtering_user, user)
35 |> Map.put(:announce_filtering_user, user)
36 |> Map.put(:user, user)
37 |> Map.put(:followed_hashtags, followed_hashtags)
38 |> Map.delete(:local)
39
40 list_memberships = Pleroma.List.memberships(user)
41 recipients = [user.ap_id | User.following(user)]
42
43 query =
44 Pleroma.Web.ActivityPub.ActivityPub.fetch_activities_query(
45 recipients ++ list_memberships,
46 params
47 )
48 |> limit(20)
49
50 Ecto.Adapters.SQL.explain(Repo, :all, query, analyze: true, timeout: :infinity)
51 |> IO.puts()
52 end
53
54 def run(["user_timeline", nickname, reading_nickname]) do
55 start_pleroma()
56 user = Repo.get_by!(User, nickname: nickname)
57 reading_user = Repo.get_by!(User, nickname: reading_nickname)
58 Logger.info("User timeline query #{user.nickname}")
59
60 params =
61 %{limit: 20}
62 |> Map.put(:type, ["Create", "Announce"])
63 |> Map.put(:user, reading_user)
64 |> Map.put(:actor_id, user.ap_id)
65 |> Map.put(:pinned_object_ids, Map.keys(user.pinned_objects))
66
67 list_memberships = Pleroma.List.memberships(user)
68
69 recipients =
70 %{
71 godmode: params[:godmode],
72 reading_user: reading_user
73 }
74 |> Pleroma.Web.ActivityPub.ActivityPub.user_activities_recipients()
75
76 query =
77 (recipients ++ list_memberships)
78 |> Pleroma.Web.ActivityPub.ActivityPub.fetch_activities_query(params)
79 |> limit(20)
80
81 Ecto.Adapters.SQL.explain(Repo, :all, query, analyze: true, timeout: :infinity)
82 |> IO.puts()
83 end
84 end