forked from MirrorHub/synapse
expose number of real reserved users
This commit is contained in:
parent
b041115415
commit
0ddf486724
3 changed files with 55 additions and 3 deletions
|
@ -307,6 +307,7 @@ class SynapseHomeServer(HomeServer):
|
||||||
# Gauges to expose monthly active user control metrics
|
# Gauges to expose monthly active user control metrics
|
||||||
current_mau_gauge = Gauge("synapse_admin_mau:current", "Current MAU")
|
current_mau_gauge = Gauge("synapse_admin_mau:current", "Current MAU")
|
||||||
max_mau_gauge = Gauge("synapse_admin_mau:max", "MAU Limit")
|
max_mau_gauge = Gauge("synapse_admin_mau:max", "MAU Limit")
|
||||||
|
reserved_mau_gauge = Gauge("synapse_admin_mau:reserved", "Reserved real MAU users")
|
||||||
|
|
||||||
|
|
||||||
def setup(config_options):
|
def setup(config_options):
|
||||||
|
@ -531,10 +532,13 @@ def run(hs):
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def generate_monthly_active_users():
|
def generate_monthly_active_users():
|
||||||
count = 0
|
current_mau_count = 0
|
||||||
|
reserved_mau_count = 0
|
||||||
if hs.config.limit_usage_by_mau:
|
if hs.config.limit_usage_by_mau:
|
||||||
count = yield hs.get_datastore().get_monthly_active_count()
|
current_mau_count = yield hs.get_datastore().get_monthly_active_count()
|
||||||
current_mau_gauge.set(float(count))
|
reserved_mau_count = yield hs.get_datastore().get_reserved_real_user_account()
|
||||||
|
current_mau_gauge.set(float(current_mau_count))
|
||||||
|
reserved_mau_gauge.set(float(reserved_mau_count))
|
||||||
max_mau_gauge.set(float(hs.config.max_mau_value))
|
max_mau_gauge.set(float(hs.config.max_mau_value))
|
||||||
|
|
||||||
hs.get_datastore().initialise_reserved_users(
|
hs.get_datastore().initialise_reserved_users(
|
||||||
|
|
|
@ -146,6 +146,23 @@ class MonthlyActiveUsersStore(SQLBaseStore):
|
||||||
return count
|
return count
|
||||||
return self.runInteraction("count_users", _count_users)
|
return self.runInteraction("count_users", _count_users)
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
|
def get_reserved_real_user_account(self):
|
||||||
|
"""Of the reserved threepids defined in config, how many are associated
|
||||||
|
with registered users?
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Defered[int]: Number of real reserved users
|
||||||
|
"""
|
||||||
|
count = 0
|
||||||
|
for tp in self.hs.config.mau_limits_reserved_threepids:
|
||||||
|
user_id = yield self.hs.get_datastore().get_user_id_by_threepid(
|
||||||
|
tp["medium"], tp["address"]
|
||||||
|
)
|
||||||
|
if user_id:
|
||||||
|
count = count + 1
|
||||||
|
defer.returnValue(count)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def upsert_monthly_active_user(self, user_id):
|
def upsert_monthly_active_user(self, user_id):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -183,3 +183,34 @@ class MonthlyActiveUsersTestCase(HomeserverTestCase):
|
||||||
self.store.populate_monthly_active_users('user_id')
|
self.store.populate_monthly_active_users('user_id')
|
||||||
self.pump()
|
self.pump()
|
||||||
self.store.upsert_monthly_active_user.assert_not_called()
|
self.store.upsert_monthly_active_user.assert_not_called()
|
||||||
|
|
||||||
|
def test_get_reserved_real_user_account(self):
|
||||||
|
# Test no reserved users, or reserved threepids
|
||||||
|
count = self.store.get_reserved_real_user_account()
|
||||||
|
self.assertEquals(self.get_success(count), 0)
|
||||||
|
# Test reserved users but no registered users
|
||||||
|
|
||||||
|
user1 = '@user1:example.com'
|
||||||
|
user2 = '@user2:example.com'
|
||||||
|
user1_email = 'user1@example.com'
|
||||||
|
user2_email = 'user2@example.com'
|
||||||
|
threepids = [
|
||||||
|
{'medium': 'email', 'address': user1_email},
|
||||||
|
{'medium': 'email', 'address': user2_email},
|
||||||
|
]
|
||||||
|
self.hs.config.mau_limits_reserved_threepids = threepids
|
||||||
|
self.store.initialise_reserved_users(threepids)
|
||||||
|
self.pump()
|
||||||
|
count = self.store.get_reserved_real_user_account()
|
||||||
|
self.assertEquals(self.get_success(count), 0)
|
||||||
|
|
||||||
|
# Test reserved registed users
|
||||||
|
self.store.register(user_id=user1, token="123", password_hash=None)
|
||||||
|
self.store.register(user_id=user2, token="456", password_hash=None)
|
||||||
|
self.pump()
|
||||||
|
|
||||||
|
now = int(self.hs.get_clock().time_msec())
|
||||||
|
self.store.user_add_threepid(user1, "email", user1_email, now, now)
|
||||||
|
self.store.user_add_threepid(user2, "email", user2_email, now, now)
|
||||||
|
count = self.store.get_reserved_real_user_account()
|
||||||
|
self.assertEquals(self.get_success(count), len(threepids))
|
||||||
|
|
Loading…
Reference in a new issue