mirror of
https://github.com/zulip/zulip.git
synced 2025-11-02 04:53:36 +00:00
support: Include mobile users and mobile push data.
Adds the count for mobile users and mobile pushes forwarded to the remote support view for both servers and realms.
This commit is contained in:
committed by
Tim Abbott
parent
92ebeb7baa
commit
63dd057298
@@ -1,10 +1,11 @@
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime
|
||||
from datetime import datetime, timedelta
|
||||
from decimal import Decimal
|
||||
from typing import Optional, TypedDict
|
||||
from urllib.parse import urlencode, urljoin, urlunsplit
|
||||
|
||||
from django.conf import settings
|
||||
from django.db.models import Sum
|
||||
from django.urls import reverse
|
||||
from django.utils.timezone import now as timezone_now
|
||||
|
||||
@@ -24,6 +25,9 @@ from zerver.models.realms import get_org_type_display_name, get_realm
|
||||
from zilencer.lib.remote_counts import MissingDataError
|
||||
from zilencer.models import (
|
||||
RemoteCustomerUserCount,
|
||||
RemoteInstallationCount,
|
||||
RemotePushDeviceToken,
|
||||
RemoteRealmCount,
|
||||
RemoteZulipServerAuditLog,
|
||||
get_remote_realm_guest_and_non_guest_count,
|
||||
get_remote_server_guest_and_non_guest_count,
|
||||
@@ -62,12 +66,19 @@ class PlanData:
|
||||
estimated_next_plan_revenue: Optional[int] = None
|
||||
|
||||
|
||||
@dataclass
|
||||
class MobilePushData:
|
||||
mobile_users: Optional[int] = None
|
||||
mobile_pushes_forwarded: Optional[int] = None
|
||||
|
||||
|
||||
@dataclass
|
||||
class SupportData:
|
||||
date_created: datetime
|
||||
plan_data: PlanData
|
||||
sponsorship_data: SponsorshipData
|
||||
user_data: RemoteCustomerUserCount
|
||||
mobile_push_data: MobilePushData
|
||||
|
||||
|
||||
def get_realm_support_url(realm: Realm) -> str:
|
||||
@@ -194,10 +205,36 @@ def get_data_for_support_view(billing_session: BillingSession) -> SupportData:
|
||||
event_type=RemoteZulipServerAuditLog.REMOTE_SERVER_CREATED,
|
||||
server__id=billing_session.remote_server.id,
|
||||
).event_time
|
||||
mobile_users = (
|
||||
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:
|
||||
assert isinstance(billing_session, RemoteRealmBillingSession)
|
||||
user_data = get_remote_realm_guest_and_non_guest_count(billing_session.remote_realm)
|
||||
date_created = billing_session.remote_realm.realm_date_created
|
||||
mobile_users = (
|
||||
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)
|
||||
customer = billing_session.get_customer()
|
||||
if customer is not None:
|
||||
@@ -210,4 +247,5 @@ def get_data_for_support_view(billing_session: BillingSession) -> SupportData:
|
||||
plan_data=plan_data,
|
||||
sponsorship_data=sponsorship_data,
|
||||
user_data=user_data,
|
||||
mobile_push_data=mobile_data,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user