From 41ceae9c31751135ae54bc101ca42a5fb93f5018 Mon Sep 17 00:00:00 2001 From: Prakhar Pratyush Date: Sat, 9 Dec 2023 19:30:30 +0530 Subject: [PATCH] remote_server: Immediately send analytics on user count change. Actions that change the number of user counts adds a deferred_work queue processor job immediately update the billing service about your change. This helps to avoid having users see stale state for how many users they have when trying to pay. --- zerver/actions/create_user.py | 4 ++++ zerver/actions/realm_settings.py | 8 ++++++++ zerver/actions/users.py | 3 +++ 3 files changed, 15 insertions(+) diff --git a/zerver/actions/create_user.py b/zerver/actions/create_user.py index b9f08f4b05..f30f2f5302 100644 --- a/zerver/actions/create_user.py +++ b/zerver/actions/create_user.py @@ -21,6 +21,7 @@ from zerver.lib.default_streams import get_slim_realm_default_streams from zerver.lib.email_notifications import enqueue_welcome_emails, send_account_registered_email from zerver.lib.exceptions import JsonableError from zerver.lib.mention import silent_mention_syntax_for_user +from zerver.lib.remote_server import maybe_enqueue_audit_log_upload from zerver.lib.send_email import clear_scheduled_invitation_emails from zerver.lib.stream_subscription import bulk_get_subscriber_peer_info from zerver.lib.user_counts import realm_user_count, realm_user_count_by_role @@ -495,6 +496,7 @@ def do_create_user( RealmAuditLog.ROLE_COUNT: realm_user_count_by_role(user_profile.realm), }, ) + maybe_enqueue_audit_log_upload(user_profile.realm) if realm_creation: # If this user just created a realm, make sure they are @@ -619,6 +621,7 @@ def do_activate_mirror_dummy_user( RealmAuditLog.ROLE_COUNT: realm_user_count_by_role(user_profile.realm), }, ) + maybe_enqueue_audit_log_upload(user_profile.realm) do_increment_logging_stat( user_profile.realm, COUNT_STATS["active_users_log:is_bot:day"], @@ -652,6 +655,7 @@ def do_reactivate_user(user_profile: UserProfile, *, acting_user: Optional[UserP RealmAuditLog.ROLE_COUNT: realm_user_count_by_role(user_profile.realm), }, ) + maybe_enqueue_audit_log_upload(user_profile.realm) bot_owner_changed = False if ( diff --git a/zerver/actions/realm_settings.py b/zerver/actions/realm_settings.py index 205f883a5a..4a5e8b2ee7 100644 --- a/zerver/actions/realm_settings.py +++ b/zerver/actions/realm_settings.py @@ -365,6 +365,10 @@ def do_deactivate_realm(realm: Realm, *, acting_user: Optional[UserProfile]) -> }, ) + from zerver.lib.remote_server import maybe_enqueue_audit_log_upload + + maybe_enqueue_audit_log_upload(realm) + ScheduledEmail.objects.filter(realm=realm).delete() # Don't deactivate the users, as that would lose a lot of state if @@ -406,6 +410,10 @@ def do_reactivate_realm(realm: Realm) -> None: }, ) + from zerver.lib.remote_server import maybe_enqueue_audit_log_upload + + maybe_enqueue_audit_log_upload(realm) + def do_add_deactivated_redirect(realm: Realm, redirect_url: str) -> None: realm.deactivated_redirect = redirect_url diff --git a/zerver/actions/users.py b/zerver/actions/users.py index b52a3dc4c0..187238c095 100644 --- a/zerver/actions/users.py +++ b/zerver/actions/users.py @@ -17,6 +17,7 @@ from zerver.lib.avatar import avatar_url_from_dict from zerver.lib.bot_config import ConfigError, get_bot_config, get_bot_configs, set_bot_config from zerver.lib.cache import bot_dict_fields from zerver.lib.create_user import create_user +from zerver.lib.remote_server import maybe_enqueue_audit_log_upload from zerver.lib.send_email import clear_scheduled_emails from zerver.lib.sessions import delete_user_sessions from zerver.lib.stream_subscription import bulk_get_subscriber_peer_info @@ -356,6 +357,7 @@ def do_deactivate_user( RealmAuditLog.ROLE_COUNT: realm_user_count_by_role(user_profile.realm), }, ) + maybe_enqueue_audit_log_upload(user_profile.realm) do_increment_logging_stat( user_profile.realm, COUNT_STATS["active_users_log:is_bot:day"], @@ -475,6 +477,7 @@ def do_change_user_role( RealmAuditLog.ROLE_COUNT: realm_user_count_by_role(user_profile.realm), }, ) + maybe_enqueue_audit_log_upload(user_profile.realm) event = dict( type="realm_user", op="update", person=dict(user_id=user_profile.id, role=user_profile.role) )