+ alias Pleroma.Repo
+ alias Pleroma.User
+
+ use GenServer
+
+ @init_state %{
+ peers: [],
+ stats: %{
+ domain_count: 0,
+ status_count: 0,
+ user_count: 0
+ }
+ }
+
+ def start_link(_) do
+ GenServer.start_link(
+ __MODULE__,
+ @init_state,
+ name: __MODULE__
+ )
+ end
+
+ @doc "Performs update stats"
+ def force_update do
+ GenServer.call(__MODULE__, :force_update)
+ end
+
+ @doc "Performs collect stats"
+ def do_collect do
+ GenServer.cast(__MODULE__, :run_update)
+ end
+
+ @doc "Returns stats data"
+ @spec get_stats() :: %{domain_count: integer(), status_count: integer(), user_count: integer()}
+ def get_stats do
+ %{stats: stats} = GenServer.call(__MODULE__, :get_state)
+
+ stats
+ end
+
+ @doc "Returns list peers"
+ @spec get_peers() :: list(String.t())
+ def get_peers do
+ %{peers: peers} = GenServer.call(__MODULE__, :get_state)
+
+ peers
+ end