stripe: Raise 'MissingDataError' while fetching license count.

If the RemoteRealmAuditLog has stale data, it means the server
stopped or never uploaded data. We raise MissingDataError in such
cases when a user action led to calculating licenses count from
stale data.
This commit is contained in:
Prakhar Pratyush
2023-12-06 23:55:49 +05:30
committed by Tim Abbott
parent 40621478cb
commit ed9b0d330d
6 changed files with 144 additions and 11 deletions

View File

@@ -2,7 +2,7 @@
# mypy: disable-error-code="explicit-override"
from dataclasses import dataclass
from datetime import datetime
from datetime import datetime, timedelta
from typing import List, Tuple
from django.conf import settings
@@ -67,6 +67,9 @@ class RemoteZulipServer(models.Model):
choices=[(t["id"], t["name"]) for t in Realm.ORG_TYPES.values()],
)
# The last time 'RemoteRealmAuditlog' was updated for this server.
last_audit_log_update = models.DateTimeField(null=True)
@override
def __str__(self) -> str:
return f"{self.hostname} {str(self.uuid)[0:12]}"
@@ -399,7 +402,7 @@ def get_remote_server_guest_and_non_guest_count(
def get_remote_realm_guest_and_non_guest_count(
remote_realm: RemoteRealm, event_time: datetime = timezone_now()
) -> RemoteCustomerUserCount: # nocoverage
) -> RemoteCustomerUserCount:
latest_audit_log = (
RemoteRealmAuditLog.objects.filter(
remote_realm=remote_realm,
@@ -430,3 +433,13 @@ def get_remote_realm_guest_and_non_guest_count(
return RemoteCustomerUserCount(
non_guest_user_count=non_guest_count, guest_user_count=guest_count
)
def has_stale_audit_log(server: RemoteZulipServer) -> bool:
if server.last_audit_log_update is None:
return True
if timezone_now() - server.last_audit_log_update > timedelta(days=2):
return True
return False