remote-support: Show datetime of last mobile push forwarded count.

This is useful for support admin to know if push notifications for
the remote server or realm have recently been logged/counted.
This commit is contained in:
Lauryn Menard
2024-02-05 19:08:30 +01:00
committed by Tim Abbott
parent 5479053a9f
commit 4f04f9f1f0
3 changed files with 66 additions and 27 deletions

View File

@@ -30,7 +30,9 @@ from zilencer.models import (
RemoteCustomerUserCount, RemoteCustomerUserCount,
RemoteInstallationCount, RemoteInstallationCount,
RemotePushDeviceToken, RemotePushDeviceToken,
RemoteRealm,
RemoteRealmCount, RemoteRealmCount,
RemoteZulipServer,
RemoteZulipServerAuditLog, RemoteZulipServerAuditLog,
get_remote_realm_guest_and_non_guest_count, get_remote_realm_guest_and_non_guest_count,
get_remote_server_guest_and_non_guest_count, get_remote_server_guest_and_non_guest_count,
@@ -75,6 +77,7 @@ class PlanData:
class MobilePushData: class MobilePushData:
mobile_users: Optional[int] = None mobile_users: Optional[int] = None
mobile_pushes_forwarded: Optional[int] = None mobile_pushes_forwarded: Optional[int] = None
last_mobile_push_sent: Optional[datetime] = None
@dataclass @dataclass
@@ -229,6 +232,62 @@ def get_current_plan_data_for_support_view(billing_session: BillingSession) -> P
return plan_data return plan_data
def get_mobile_push_data(remote_entity: Union[RemoteZulipServer, RemoteRealm]) -> MobilePushData:
if isinstance(remote_entity, RemoteZulipServer):
mobile_users = (
RemotePushDeviceToken.objects.filter(server=remote_entity)
.distinct("user_id", "user_uuid")
.count()
)
mobile_pushes = RemoteInstallationCount.objects.filter(
server=remote_entity,
property="mobile_pushes_forwarded::day",
end_time__gte=timezone_now() - timedelta(days=7),
).aggregate(total_forwarded=Sum("value", default=0))
latest_remote_server_push_forwarded_count = RemoteInstallationCount.objects.filter(
server=remote_entity,
property="mobile_pushes_forwarded::day",
).last()
if latest_remote_server_push_forwarded_count is not None: # nocoverage
return MobilePushData(
mobile_users=mobile_users,
mobile_pushes_forwarded=mobile_pushes["total_forwarded"],
last_mobile_push_sent=latest_remote_server_push_forwarded_count.end_time,
)
return MobilePushData(
mobile_users=mobile_users,
mobile_pushes_forwarded=mobile_pushes["total_forwarded"],
last_mobile_push_sent=None,
)
else:
assert isinstance(remote_entity, RemoteRealm)
mobile_users = (
RemotePushDeviceToken.objects.filter(remote_realm=remote_entity)
.distinct("user_id", "user_uuid")
.count()
)
mobile_pushes = RemoteRealmCount.objects.filter(
remote_realm=remote_entity,
property="mobile_pushes_forwarded::day",
end_time__gte=timezone_now() - timedelta(days=7),
).aggregate(total_forwarded=Sum("value", default=0))
latest_remote_realm_push_forwarded_count = RemoteRealmCount.objects.filter(
remote_realm=remote_entity,
property="mobile_pushes_forwarded::day",
).last()
if latest_remote_realm_push_forwarded_count is not None: # nocoverage
return MobilePushData(
mobile_users=mobile_users,
mobile_pushes_forwarded=mobile_pushes["total_forwarded"],
last_mobile_push_sent=latest_remote_realm_push_forwarded_count.end_time,
)
return MobilePushData(
mobile_users=mobile_users,
mobile_pushes_forwarded=mobile_pushes["total_forwarded"],
last_mobile_push_sent=None,
)
def get_data_for_support_view(billing_session: BillingSession) -> SupportData: def get_data_for_support_view(billing_session: BillingSession) -> SupportData:
if isinstance(billing_session, RemoteServerBillingSession): if isinstance(billing_session, RemoteServerBillingSession):
user_data = get_remote_server_guest_and_non_guest_count(billing_session.remote_server.id) user_data = get_remote_server_guest_and_non_guest_count(billing_session.remote_server.id)
@@ -236,36 +295,12 @@ def get_data_for_support_view(billing_session: BillingSession) -> SupportData:
event_type=RemoteZulipServerAuditLog.REMOTE_SERVER_CREATED, event_type=RemoteZulipServerAuditLog.REMOTE_SERVER_CREATED,
server__id=billing_session.remote_server.id, server__id=billing_session.remote_server.id,
).event_time ).event_time
mobile_users = ( mobile_data = get_mobile_push_data(billing_session.remote_server)
RemotePushDeviceToken.objects.filter(server=billing_session.remote_server)
.distinct("user_id", "user_uuid")
.count()
)
mobile_pushes = RemoteInstallationCount.objects.filter(
server=billing_session.remote_server,
property="mobile_pushes_forwarded::day",
end_time__gte=timezone_now() - timedelta(days=7),
).aggregate(total_forwarded=Sum("value", default=0))
mobile_data = MobilePushData(
mobile_users=mobile_users, mobile_pushes_forwarded=mobile_pushes["total_forwarded"]
)
else: else:
assert isinstance(billing_session, RemoteRealmBillingSession) assert isinstance(billing_session, RemoteRealmBillingSession)
user_data = get_remote_realm_guest_and_non_guest_count(billing_session.remote_realm) user_data = get_remote_realm_guest_and_non_guest_count(billing_session.remote_realm)
date_created = billing_session.remote_realm.realm_date_created date_created = billing_session.remote_realm.realm_date_created
mobile_users = ( mobile_data = get_mobile_push_data(billing_session.remote_realm)
RemotePushDeviceToken.objects.filter(remote_realm=billing_session.remote_realm)
.distinct("user_id", "user_uuid")
.count()
)
mobile_pushes = RemoteRealmCount.objects.filter(
remote_realm=billing_session.remote_realm,
property="mobile_pushes_forwarded::day",
end_time__gte=timezone_now() - timedelta(days=7),
).aggregate(total_forwarded=Sum("value", default=0))
mobile_data = MobilePushData(
mobile_users=mobile_users, mobile_pushes_forwarded=mobile_pushes["total_forwarded"]
)
plan_data = get_current_plan_data_for_support_view(billing_session) plan_data = get_current_plan_data_for_support_view(billing_session)
customer = billing_session.get_customer() customer = billing_session.get_customer()
if customer is not None: if customer is not None:

View File

@@ -20,11 +20,12 @@
<b>Date created</b>: {{ support_data[remote_realm.id].date_created.strftime('%d %B %Y') }}<br /> <b>Date created</b>: {{ support_data[remote_realm.id].date_created.strftime('%d %B %Y') }}<br />
<b>Org type</b>: {{ get_org_type_display_name(remote_realm.org_type) }}<br /> <b>Org type</b>: {{ get_org_type_display_name(remote_realm.org_type) }}<br />
<b>Plan type</b>: {{ get_plan_type_name(remote_realm.plan_type) }}<br /> <b>Plan type</b>: {{ get_plan_type_name(remote_realm.plan_type) }}<br />
<br />
<b>Non-guest user count</b>: {{ support_data[remote_realm.id].user_data.non_guest_user_count }}<br /> <b>Non-guest user count</b>: {{ support_data[remote_realm.id].user_data.non_guest_user_count }}<br />
<b>Guest user count</b>: {{ support_data[remote_realm.id].user_data.guest_user_count }}<br /> <b>Guest user count</b>: {{ support_data[remote_realm.id].user_data.guest_user_count }}<br />
<br />
<b>Mobile user count</b>: {{ support_data[remote_realm.id].mobile_push_data.mobile_users }}<br /> <b>Mobile user count</b>: {{ support_data[remote_realm.id].mobile_push_data.mobile_users }}<br />
<b>7-day mobile pushes count</b>: {{ support_data[remote_realm.id].mobile_push_data.mobile_pushes_forwarded }}<br /> <b>7-day mobile pushes count</b>: {{ support_data[remote_realm.id].mobile_push_data.mobile_pushes_forwarded }}<br />
<b>Last push notification sent (UTC)</b>: {{ format_optional_datetime(support_data[remote_realm.id].mobile_push_data.last_mobile_push_sent, True) }}<br />
</div> </div>
{% if remote_realm.plan_type != SPONSORED_PLAN_TYPE %} {% if remote_realm.plan_type != SPONSORED_PLAN_TYPE %}

View File

@@ -59,8 +59,10 @@
<b>Plan type</b>: {{ get_plan_type_name(remote_server.plan_type) }}<br /> <b>Plan type</b>: {{ get_plan_type_name(remote_server.plan_type) }}<br />
<b>Non-guest user count</b>: {{ remote_servers_support_data[remote_server.id].user_data.non_guest_user_count }}<br /> <b>Non-guest user count</b>: {{ remote_servers_support_data[remote_server.id].user_data.non_guest_user_count }}<br />
<b>Guest user count</b>: {{ remote_servers_support_data[remote_server.id].user_data.guest_user_count }}<br /> <b>Guest user count</b>: {{ remote_servers_support_data[remote_server.id].user_data.guest_user_count }}<br />
<br />
<b>Mobile user count</b>: {{ remote_servers_support_data[remote_server.id].mobile_push_data.mobile_users }}<br /> <b>Mobile user count</b>: {{ remote_servers_support_data[remote_server.id].mobile_push_data.mobile_users }}<br />
<b>7-day mobile pushes count</b>: {{ remote_servers_support_data[remote_server.id].mobile_push_data.mobile_pushes_forwarded }}<br /> <b>7-day mobile pushes count</b>: {{ remote_servers_support_data[remote_server.id].mobile_push_data.mobile_pushes_forwarded }}<br />
<b>Last push notification sent (UTC)</b>: {{ format_optional_datetime(remote_servers_support_data[remote_server.id].mobile_push_data.last_mobile_push_sent, True) }}<br />
</div> </div>
{% if remote_server.plan_type != SPONSORED_PLAN_TYPE %} {% if remote_server.plan_type != SPONSORED_PLAN_TYPE %}
@@ -116,6 +118,7 @@
{% set support_data = remote_realms_support_data %} {% set support_data = remote_realms_support_data %}
{% set get_plan_type_name = get_plan_type_name %} {% set get_plan_type_name = get_plan_type_name %}
{% set format_discount = format_discount %} {% set format_discount = format_discount %}
{% set format_optional_datetime = format_optional_datetime %}
{% set dollar_amount = dollar_amount %} {% set dollar_amount = dollar_amount %}
{% include "corporate/support/remote_realm_details.html" %} {% include "corporate/support/remote_realm_details.html" %}
{% endwith %} {% endwith %}