mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 13:33:24 +00:00
billing: Sync realm activation events for on-prem billing.
This commit is contained in:
@@ -716,7 +716,9 @@ def do_deactivate_realm(realm: Realm, acting_user: Optional[UserProfile]=None) -
|
||||
event_time = timezone_now()
|
||||
RealmAuditLog.objects.create(
|
||||
realm=realm, event_type=RealmAuditLog.REALM_DEACTIVATED, event_time=event_time,
|
||||
acting_user=acting_user)
|
||||
acting_user=acting_user, extra_data=ujson.dumps({
|
||||
RealmAuditLog.ROLE_COUNT: realm_user_count_by_role(realm)
|
||||
}))
|
||||
|
||||
ScheduledEmail.objects.filter(realm=realm).delete()
|
||||
for user in active_humans_in_realm(realm):
|
||||
@@ -735,7 +737,10 @@ def do_reactivate_realm(realm: Realm) -> None:
|
||||
|
||||
event_time = timezone_now()
|
||||
RealmAuditLog.objects.create(
|
||||
realm=realm, event_type=RealmAuditLog.REALM_REACTIVATED, event_time=event_time)
|
||||
realm=realm, event_type=RealmAuditLog.REALM_REACTIVATED, event_time=event_time,
|
||||
extra_data=ujson.dumps({
|
||||
RealmAuditLog.ROLE_COUNT: realm_user_count_by_role(realm)
|
||||
}))
|
||||
|
||||
def do_change_realm_subdomain(realm: Realm, new_subdomain: str) -> None:
|
||||
realm.string_id = new_subdomain
|
||||
|
||||
@@ -2579,14 +2579,10 @@ class RealmAuditLog(models.Model):
|
||||
ROLE_COUNT = '10'
|
||||
ROLE_COUNT_HUMANS = '11'
|
||||
ROLE_COUNT_BOTS = '12'
|
||||
|
||||
extra_data = models.TextField(null=True) # type: Optional[str]
|
||||
|
||||
# USER_* event_types between 100 and 119 are synced from on-prem installations
|
||||
# to zulipchat.com when billing for mobile push notifications is enabled.
|
||||
# Every billing event_type must have ROLE_COUNT populated in extra_data.
|
||||
MIN_BILLING_EVENT_TYPE = 100
|
||||
MAX_BILLING_EVENT_TYPE = 119
|
||||
|
||||
# Event types
|
||||
USER_CREATED = 101
|
||||
USER_ACTIVATED = 102
|
||||
USER_DEACTIVATED = 103
|
||||
@@ -2624,6 +2620,13 @@ class RealmAuditLog(models.Model):
|
||||
|
||||
event_type = models.PositiveSmallIntegerField() # type: int
|
||||
|
||||
# event_types synced from on-prem installations to zulipchat.com when
|
||||
# billing for mobile push notifications is enabled. Every billing
|
||||
# event_type should have ROLE_COUNT populated in extra_data.
|
||||
SYNCED_BILLING_EVENTS = [
|
||||
USER_CREATED, USER_ACTIVATED, USER_DEACTIVATED, USER_REACTIVATED, USER_ROLE_CHANGED,
|
||||
REALM_DEACTIVATED, REALM_REACTIVATED]
|
||||
|
||||
def __str__(self) -> str:
|
||||
if self.modified_user is not None:
|
||||
return "<RealmAuditLog: %s %s %s %s>" % (
|
||||
|
||||
@@ -5,7 +5,7 @@ from zerver.lib.actions import do_create_user, do_deactivate_user, \
|
||||
do_change_user_delivery_email, do_change_avatar_fields, do_change_bot_owner, \
|
||||
do_regenerate_api_key, do_change_tos_version, \
|
||||
bulk_add_subscriptions, bulk_remove_subscriptions, get_streams_traffic, \
|
||||
do_change_is_admin, do_change_is_guest
|
||||
do_change_is_admin, do_change_is_guest, do_deactivate_realm, do_reactivate_realm
|
||||
from zerver.lib.test_classes import ZulipTestCase
|
||||
from zerver.models import RealmAuditLog, get_client, get_realm, UserProfile
|
||||
from analytics.models import StreamCount
|
||||
@@ -173,3 +173,15 @@ class TestRealmAuditLog(ZulipTestCase):
|
||||
self.assertEqual(subscription_deactivation_logs.count(), 1)
|
||||
self.assertEqual(subscription_deactivation_logs[0].modified_stream.id, stream[0].id)
|
||||
self.assertEqual(subscription_deactivation_logs[0].modified_user, user[0])
|
||||
|
||||
def test_realm_activation(self) -> None:
|
||||
realm = get_realm('zulip')
|
||||
do_deactivate_realm(realm)
|
||||
log_entry = RealmAuditLog.objects.get(realm=realm, event_type=RealmAuditLog.REALM_DEACTIVATED)
|
||||
extra_data = ujson.loads(log_entry.extra_data)
|
||||
self.check_role_count_schema(extra_data[RealmAuditLog.ROLE_COUNT])
|
||||
|
||||
do_reactivate_realm(realm)
|
||||
log_entry = RealmAuditLog.objects.get(realm=realm, event_type=RealmAuditLog.REALM_REACTIVATED)
|
||||
extra_data = ujson.loads(log_entry.extra_data)
|
||||
self.check_role_count_schema(extra_data[RealmAuditLog.ROLE_COUNT])
|
||||
|
||||
Reference in New Issue
Block a user