diff options
author | Neil Johnson <neil@matrix.org> | 2018-06-01 13:42:01 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-01 13:42:01 +0000 |
commit | 71477f331707e27f1181d0770799d17a4a03cf59 (patch) | |
tree | ddf90fdbe0ac5cebcd315c339bd83b12925c7149 /synapse/storage/registration.py | |
parent | Merge pull request #3318 from matrix-org/rav/ignore_depth_on_rrs (diff) | |
parent | remove unnecessary INSERT (diff) | |
download | synapse-71477f331707e27f1181d0770799d17a4a03cf59.tar.xz |
Merge pull request #3264 from matrix-org/neil/sign-up-stats
daily user type phone home stats
Diffstat (limited to 'synapse/storage/registration.py')
-rw-r--r-- | synapse/storage/registration.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/synapse/storage/registration.py b/synapse/storage/registration.py index 40f7cc16ee..c241167fbe 100644 --- a/synapse/storage/registration.py +++ b/synapse/storage/registration.py @@ -102,6 +102,13 @@ class RegistrationStore(RegistrationWorkerStore, columns=["user_id", "device_id"], ) + self.register_background_index_update( + "users_creation_ts", + index_name="users_creation_ts", + table="users", + columns=["creation_ts"], + ) + # we no longer use refresh tokens, but it's possible that some people # might have a background update queued to build this index. Just # clear the background update. @@ -486,6 +493,35 @@ class RegistrationStore(RegistrationWorkerStore, ret = yield self.runInteraction("count_users", _count_users) defer.returnValue(ret) + def count_daily_user_type(self): + """ + Counts 1) native non guest users + 2) native guests users + 3) bridged users + who registered on the homeserver in the past 24 hours + """ + def _count_daily_user_type(txn): + yesterday = int(self._clock.time()) - (60 * 60 * 24) + + sql = """ + SELECT user_type, COALESCE(count(*), 0) AS count FROM ( + SELECT + CASE + WHEN is_guest=0 AND appservice_id IS NULL THEN 'native' + WHEN is_guest=1 AND appservice_id IS NULL THEN 'guest' + WHEN is_guest=0 AND appservice_id IS NOT NULL THEN 'bridged' + END AS user_type + FROM users + WHERE creation_ts > ? + ) AS t GROUP BY user_type + """ + results = {'native': 0, 'guest': 0, 'bridged': 0} + txn.execute(sql, (yesterday,)) + for row in txn: + results[row[0]] = row[1] + return results + return self.runInteraction("count_daily_user_type", _count_daily_user_type) + @defer.inlineCallbacks def count_nonbridged_users(self): def _count_users(txn): |