mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-08-09 02:32:14 -04:00
Convert additional databases to async/await (#8199)
This commit is contained in:
parent
5bf8e5f55b
commit
54f8d73c00
7 changed files with 147 additions and 137 deletions
|
@ -18,7 +18,7 @@
|
|||
import calendar
|
||||
import logging
|
||||
import time
|
||||
from typing import Any, Dict, List, Optional
|
||||
from typing import Any, Dict, List, Optional, Tuple
|
||||
|
||||
from synapse.api.constants import PresenceState
|
||||
from synapse.config.homeserver import HomeServerConfig
|
||||
|
@ -294,16 +294,16 @@ class DataStore(
|
|||
|
||||
return [UserPresenceState(**row) for row in rows]
|
||||
|
||||
def count_daily_users(self):
|
||||
async def count_daily_users(self) -> int:
|
||||
"""
|
||||
Counts the number of users who used this homeserver in the last 24 hours.
|
||||
"""
|
||||
yesterday = int(self._clock.time_msec()) - (1000 * 60 * 60 * 24)
|
||||
return self.db_pool.runInteraction(
|
||||
return await self.db_pool.runInteraction(
|
||||
"count_daily_users", self._count_users, yesterday
|
||||
)
|
||||
|
||||
def count_monthly_users(self):
|
||||
async def count_monthly_users(self) -> int:
|
||||
"""
|
||||
Counts the number of users who used this homeserver in the last 30 days.
|
||||
Note this method is intended for phonehome metrics only and is different
|
||||
|
@ -311,7 +311,7 @@ class DataStore(
|
|||
amongst other things, includes a 3 day grace period before a user counts.
|
||||
"""
|
||||
thirty_days_ago = int(self._clock.time_msec()) - (1000 * 60 * 60 * 24 * 30)
|
||||
return self.db_pool.runInteraction(
|
||||
return await self.db_pool.runInteraction(
|
||||
"count_monthly_users", self._count_users, thirty_days_ago
|
||||
)
|
||||
|
||||
|
@ -330,15 +330,15 @@ class DataStore(
|
|||
(count,) = txn.fetchone()
|
||||
return count
|
||||
|
||||
def count_r30_users(self):
|
||||
async def count_r30_users(self) -> Dict[str, int]:
|
||||
"""
|
||||
Counts the number of 30 day retained users, defined as:-
|
||||
* Users who have created their accounts more than 30 days ago
|
||||
* Where last seen at most 30 days ago
|
||||
* Where account creation and last_seen are > 30 days apart
|
||||
|
||||
Returns counts globaly for a given user as well as breaking
|
||||
by platform
|
||||
Returns:
|
||||
A mapping of counts globally as well as broken out by platform.
|
||||
"""
|
||||
|
||||
def _count_r30_users(txn):
|
||||
|
@ -411,7 +411,7 @@ class DataStore(
|
|||
|
||||
return results
|
||||
|
||||
return self.db_pool.runInteraction("count_r30_users", _count_r30_users)
|
||||
return await self.db_pool.runInteraction("count_r30_users", _count_r30_users)
|
||||
|
||||
def _get_start_of_day(self):
|
||||
"""
|
||||
|
@ -421,7 +421,7 @@ class DataStore(
|
|||
today_start = calendar.timegm((now.tm_year, now.tm_mon, now.tm_mday, 0, 0, 0))
|
||||
return today_start * 1000
|
||||
|
||||
def generate_user_daily_visits(self):
|
||||
async def generate_user_daily_visits(self) -> None:
|
||||
"""
|
||||
Generates daily visit data for use in cohort/ retention analysis
|
||||
"""
|
||||
|
@ -476,7 +476,7 @@ class DataStore(
|
|||
# frequently
|
||||
self._last_user_visit_update = now
|
||||
|
||||
return self.db_pool.runInteraction(
|
||||
await self.db_pool.runInteraction(
|
||||
"generate_user_daily_visits", _generate_user_daily_visits
|
||||
)
|
||||
|
||||
|
@ -500,22 +500,28 @@ class DataStore(
|
|||
desc="get_users",
|
||||
)
|
||||
|
||||
def get_users_paginate(
|
||||
self, start, limit, user_id=None, name=None, guests=True, deactivated=False
|
||||
):
|
||||
async def get_users_paginate(
|
||||
self,
|
||||
start: int,
|
||||
limit: int,
|
||||
user_id: Optional[str] = None,
|
||||
name: Optional[str] = None,
|
||||
guests: bool = True,
|
||||
deactivated: bool = False,
|
||||
) -> Tuple[List[Dict[str, Any]], int]:
|
||||
"""Function to retrieve a paginated list of users from
|
||||
users list. This will return a json list of users and the
|
||||
total number of users matching the filter criteria.
|
||||
|
||||
Args:
|
||||
start (int): start number to begin the query from
|
||||
limit (int): number of rows to retrieve
|
||||
user_id (string): search for user_id. ignored if name is not None
|
||||
name (string): search for local part of user_id or display name
|
||||
guests (bool): whether to in include guest users
|
||||
deactivated (bool): whether to include deactivated users
|
||||
start: start number to begin the query from
|
||||
limit: number of rows to retrieve
|
||||
user_id: search for user_id. ignored if name is not None
|
||||
name: search for local part of user_id or display name
|
||||
guests: whether to in include guest users
|
||||
deactivated: whether to include deactivated users
|
||||
Returns:
|
||||
defer.Deferred: resolves to list[dict[str, Any]], int
|
||||
A tuple of a list of mappings from user to information and a count of total users.
|
||||
"""
|
||||
|
||||
def get_users_paginate_txn(txn):
|
||||
|
@ -558,7 +564,7 @@ class DataStore(
|
|||
users = self.db_pool.cursor_to_dict(txn)
|
||||
return users, count
|
||||
|
||||
return self.db_pool.runInteraction(
|
||||
return await self.db_pool.runInteraction(
|
||||
"get_users_paginate_txn", get_users_paginate_txn
|
||||
)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue