Merge branch 'bugfix/1670-user-count' into 'develop'
authorHaelwenn <contact+git.pleroma.social@hacktivis.me>
Wed, 22 Apr 2020 17:37:09 +0000 (17:37 +0000)
committerrinpatch <rinpatch@sdf.org>
Thu, 30 Apr 2020 21:55:37 +0000 (00:55 +0300)
Stats: Ignore internal users for user count.

Closes #1670

See merge request pleroma/pleroma!2414

lib/pleroma/stats.ex
test/stats_test.exs [moved from test/stat_test.exs with 86% similarity]

index 4446562ac0b797fc28762cee480387796852b28d..8d2809bbbe546bce9399f069d72f11027da5ba45 100644 (file)
@@ -45,11 +45,11 @@ defmodule Pleroma.Stats do
   end
 
   def init(_args) do
-    {:ok, get_stat_data()}
+    {:ok, calculate_stat_data()}
   end
 
   def handle_call(:force_update, _from, _state) do
-    new_stats = get_stat_data()
+    new_stats = calculate_stat_data()
     {:reply, new_stats, new_stats}
   end
 
@@ -58,12 +58,12 @@ defmodule Pleroma.Stats do
   end
 
   def handle_cast(:run_update, _state) do
-    new_stats = get_stat_data()
+    new_stats = calculate_stat_data()
 
     {:noreply, new_stats}
   end
 
-  defp get_stat_data do
+  def calculate_stat_data do
     peers =
       from(
         u in User,
@@ -77,7 +77,15 @@ defmodule Pleroma.Stats do
 
     status_count = Repo.aggregate(User.Query.build(%{local: true}), :sum, :note_count)
 
-    user_count = Repo.aggregate(User.Query.build(%{local: true, active: true}), :count, :id)
+    users_query =
+      from(u in User,
+        where: u.deactivated != true,
+        where: u.local == true,
+        where: not is_nil(u.nickname),
+        where: not u.invisible
+      )
+
+    user_count = Repo.aggregate(users_query, :count, :id)
 
     %{
       peers: peers,
similarity index 86%
rename from test/stat_test.exs
rename to test/stats_test.exs
index 33b77e7e72559454f89dbf019f1121aa64a48486..8ddfb47a59cde9b46a9eca3bd630ab98dd209f46 100644 (file)
@@ -2,11 +2,21 @@
 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
-defmodule Pleroma.StateTest do
+defmodule Pleroma.StatsTest do
   use Pleroma.DataCase
   import Pleroma.Factory
   alias Pleroma.Web.CommonAPI
 
+  describe "user count" do
+    test "it ignores internal users" do
+      _user = insert(:user, local: true)
+      _internal = insert(:user, local: true, nickname: nil)
+      _internal = Pleroma.Web.ActivityPub.Relay.get_actor()
+
+      assert match?(%{stats: %{user_count: 1}}, Pleroma.Stats.calculate_stat_data())
+    end
+  end
+
   describe "status visibility count" do
     test "on new status" do
       user = insert(:user)