Filter out appservices from mau count (#8404)

This is an attempt to fix #8403.
This commit is contained in:
Will Hunt 2020-09-29 13:11:02 +01:00 committed by GitHub
parent 1c6b8752b8
commit 8676d8ab2e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 2 deletions

1
changelog.d/8404.misc Normal file
View File

@ -0,0 +1 @@
Do not include appservice users when calculating the total MAU for a server.

View File

@ -41,7 +41,14 @@ class MonthlyActiveUsersWorkerStore(SQLBaseStore):
""" """
def _count_users(txn): def _count_users(txn):
sql = "SELECT COALESCE(count(*), 0) FROM monthly_active_users" # Exclude app service users
sql = """
SELECT COALESCE(count(*), 0)
FROM monthly_active_users
LEFT JOIN users
ON monthly_active_users.user_id=users.name
WHERE (users.appservice_id IS NULL OR users.appservice_id = '');
"""
txn.execute(sql) txn.execute(sql)
(count,) = txn.fetchone() (count,) = txn.fetchone()
return count return count

View File

@ -137,6 +137,21 @@ class MonthlyActiveUsersTestCase(unittest.HomeserverTestCase):
count = self.get_success(self.store.get_monthly_active_count()) count = self.get_success(self.store.get_monthly_active_count())
self.assertEqual(count, 1) self.assertEqual(count, 1)
def test_appservice_user_not_counted_in_mau(self):
self.get_success(
self.store.register_user(
user_id="@appservice_user:server", appservice_id="wibble"
)
)
count = self.get_success(self.store.get_monthly_active_count())
self.assertEqual(count, 0)
d = self.store.upsert_monthly_active_user("@appservice_user:server")
self.get_success(d)
count = self.get_success(self.store.get_monthly_active_count())
self.assertEqual(count, 0)
def test_user_last_seen_monthly_active(self): def test_user_last_seen_monthly_active(self):
user_id1 = "@user1:server" user_id1 = "@user1:server"
user_id2 = "@user2:server" user_id2 = "@user2:server"
@ -383,7 +398,7 @@ class MonthlyActiveUsersTestCase(unittest.HomeserverTestCase):
self.get_success(self.store.upsert_monthly_active_user(appservice2_user1)) self.get_success(self.store.upsert_monthly_active_user(appservice2_user1))
count = self.get_success(self.store.get_monthly_active_count()) count = self.get_success(self.store.get_monthly_active_count())
self.assertEqual(count, 4) self.assertEqual(count, 1)
d = self.store.get_monthly_active_count_by_service() d = self.store.get_monthly_active_count_by_service()
result = self.get_success(d) result = self.get_success(d)