mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-12-05 00:32:21 -05:00
Break down monthly active users by appservice_id (#7030)
* Break down monthly active users by appservice_id and emit via prometheus. Co-authored-by: Brendan Abolivier <babolivier@matrix.org>
This commit is contained in:
parent
87972f07e5
commit
1d66dce83e
4 changed files with 87 additions and 1 deletions
|
|
@ -43,13 +43,40 @@ class MonthlyActiveUsersWorkerStore(SQLBaseStore):
|
|||
|
||||
def _count_users(txn):
|
||||
sql = "SELECT COALESCE(count(*), 0) FROM monthly_active_users"
|
||||
|
||||
txn.execute(sql)
|
||||
(count,) = txn.fetchone()
|
||||
return count
|
||||
|
||||
return self.db.runInteraction("count_users", _count_users)
|
||||
|
||||
@cached(num_args=0)
|
||||
def get_monthly_active_count_by_service(self):
|
||||
"""Generates current count of monthly active users broken down by service.
|
||||
A service is typically an appservice but also includes native matrix users.
|
||||
Since the `monthly_active_users` table is populated from the `user_ips` table
|
||||
`config.track_appservice_user_ips` must be set to `true` for this
|
||||
method to return anything other than native matrix users.
|
||||
|
||||
Returns:
|
||||
Deferred[dict]: dict that includes a mapping between app_service_id
|
||||
and the number of occurrences.
|
||||
|
||||
"""
|
||||
|
||||
def _count_users_by_service(txn):
|
||||
sql = """
|
||||
SELECT COALESCE(appservice_id, 'native'), COALESCE(count(*), 0)
|
||||
FROM monthly_active_users
|
||||
LEFT JOIN users ON monthly_active_users.user_id=users.name
|
||||
GROUP BY appservice_id;
|
||||
"""
|
||||
|
||||
txn.execute(sql)
|
||||
result = txn.fetchall()
|
||||
return dict(result)
|
||||
|
||||
return self.db.runInteraction("count_users_by_service", _count_users_by_service)
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def get_registered_reserved_users(self):
|
||||
"""Of the reserved threepids defined in config, which are associated
|
||||
|
|
@ -291,6 +318,9 @@ class MonthlyActiveUsersStore(MonthlyActiveUsersWorkerStore):
|
|||
)
|
||||
|
||||
self._invalidate_cache_and_stream(txn, self.get_monthly_active_count, ())
|
||||
self._invalidate_cache_and_stream(
|
||||
txn, self.get_monthly_active_count_by_service, ()
|
||||
)
|
||||
self._invalidate_cache_and_stream(
|
||||
txn, self.user_last_seen_monthly_active, (user_id,)
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue